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

简介:

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

其中一个新增操作我使用了公司封装的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。不要混用。




本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/1579382,如需转载请自行联系原作者
相关文章
|
11天前
|
关系型数据库 API 数据库
Django中的数据库事务管理:确保数据一致性
【4月更文挑战第15天】Django框架提供强大的数据库事务管理,确保ACID属性,保证数据一致性和完整性。文章深入讨论了Django事务管理,包括使用`@transaction.atomic`装饰器和`transaction.atomic()`上下文管理器手动控制事务,以及低级API进行精细管理。注意避免长时间事务、选择合适隔离级别、正确处理异常及了解数据库特性。掌握这些技巧对构建可靠Web应用至关重要。
|
1月前
|
SQL NoSQL 数据库
深入浅出:微服务架构下的数据库事务管理
【2月更文挑战第12天】 在当今微服务架构日益流行的背景下,如何有效地管理跨服务的数据库事务成为了开发与维护中的一大挑战。本文旨在探讨微服务环境下数据库事务管理的关键技术和策略,包括但不限于分布式事务的基本概念、常见的解决方案(如两阶段提交、补偿事务等),以及这些方案在实际应用中的优缺点比较。通过深入浅出的方式,本文希望能够帮助读者更好地理解并应对微服务架构下的数据库事务管理问题,进而提升系统的稳定性和可靠性。
|
4月前
|
SQL 安全 关系型数据库
数据库第十三次作业 事务管理
数据库第十三次作业 事务管理
33 6
|
6月前
|
XML Java Go
Spring事务管理: 构建稳健的数据库事务处理
Spring事务管理: 构建稳健的数据库事务处理
35 0
|
10月前
|
XML Oracle Java
第九篇 Spring数据库事务管理
第九篇 Spring数据库事务管理
80 0
|
11月前
|
SQL Oracle Java
Spring JDBC-Spring事务管理之数据库事务基础知识
Spring JDBC-Spring事务管理之数据库事务基础知识
63 0
|
SQL 数据库
【数据库技术基础】事务管理
【数据库技术基础】事务管理
67 0
|
SQL 存储 人工智能
数据库杂谈(九)—— 事务管理
本文主要讲解数据库中如何实现事务的管理
136 0
|
安全 Oracle 关系型数据库
事务管理、事务特性、数据库并发访问问题、事务应用【转账】
事务管理、事务特性、数据库并发访问问题、事务应用【转账】
113 0
事务管理、事务特性、数据库并发访问问题、事务应用【转账】

热门文章

最新文章