数据库事务管理:掺杂使用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/1570400,如需转载请自行联系原作者

相关文章
|
7月前
|
数据库
通过基于注解的声明式事务实现事务功能~2
通过基于注解的声明式事务实现事务功能~
|
7月前
|
XML Java 关系型数据库
通过基于注解的声明式事务实现事务功能~1
通过基于注解的声明式事务实现事务功能~
通过基于注解的声明式事务实现事务功能~1
|
9月前
|
Java 数据库连接 数据库
|
9月前
|
Java 数据库连接 API
spring事务管理
spring事务管理
52 0
|
Java 关系型数据库 MySQL
详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
457 0
详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
|
SQL Oracle Java
JDBC事务控制管理
JDBC事务控制管理
95 0
JDBC事务控制管理
|
安全 Java 关系型数据库
第08篇:Mybatis事务处理
Java JDK中提供了标准接口`Connection`,不同的数据库驱动负责具体的实现。后面无论是`Spring`还是`Mybatis`对事务的处理,无论怎么的封装,最终究其到底都是由`Connection`来提供的能力。
231 0
|
SQL Java 关系型数据库
Spring事务管理(二)分布式事务管理之JTA与链式事务
Spring事务管理(二)分布式事务管理之JTA与链式事务
Spring事务管理(二)分布式事务管理之JTA与链式事务
|
XML Java 数据库连接
Hibernate简单注解开发和事务处理(四)下
Hibernate简单注解开发和事务处理(四)
232 0
Hibernate简单注解开发和事务处理(四)下