首页 > 数据库技术 > 详细

数据库事务管理:掺杂使用entityDao和jdbcTemplate时的问题

时间:2014-10-31 15:54:05      阅读:422      评论:0      收藏:0      [点我收藏+]

代码中有一个较大的事务,需要做多次数据库的增删改等操作。

其中一个新增操作我使用了公司封装的hibernate的entityDao;其它操作使用的是spring提供的jdbcTemplate。二者操作流程基本如下:

entityDao.save(写入表1)

jdbcTemplate.update(根据entityDao向表1写入的最新数据,更新表2)

结果,entityDao能够正确写入表1;但是jdbcTemplate的更新操作却始终失败(数据库操作正常结束,但应该被更新的数据没有被更新)。

烦了很久,最后把所有的sql和transaction管理日志全部打印出来,发现一个小问题。

entityDao 的相关事务,是hibernate管理的;但jdbcTemplate的事务,是根据代码中配置的@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class),由JTATransactionInterceptor管理的。

这就是问题原因所在。二者的事务管理机制不一样,因此相当于在两个不同的事务中执行各自的数据库操作。jdbcTemplate在自己的事务中,是看不到entityDao写入它的事务、但暂时没有提交到数据库的数据库的。

 

总之:如果要进行数据库的增删改操作,要么统一使用entityDao,要么统一使用jdbcTemplate。不要混用。


本文出自 “编程的摩羯男” 博客,请务必保留此出处http://winters1224.blog.51cto.com/3021203/1570400

数据库事务管理:掺杂使用entityDao和jdbcTemplate时的问题

原文:http://winters1224.blog.51cto.com/3021203/1570400

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!