spring事务不生效

遇到了一个spring配置事务不能生效的问题,在网上查了一下各种解决方案,但还是不能解决,不知道问题根源在哪里,请各位大神指点,非常感谢。
[code="java"]


......






com.abc


......


class="org.springframework.orm.hibernate3.HibernateTransactionManager">




tx:attributes


/tx:attributes
/tx:advice

aop:config


/aop:config
[/code]
不知道是不是配置的问题,代码采用的是springMVC+spring+hibernate的框架,采用的是注解方式,service和DAO中都使用过注解定义事务,仍然没有作用,数据操作采用的是getHibernateTemplate().save...。

4个回答

事务生效的本质在于注解或者AOP的事务控制逻辑与代码中使用的逻辑在执行的过程中是否使用了相同的数据库连接&线程的控制,因此事务不能正确启用可能有如下几种原因:

1)事务逻辑控制与代码使用的是不同的数据源:比如注解配置的是transactionManagerA ==> A的数据源,代码里面从数据源B获取连接,这时事务是不会启用的;

2)使用了同一个数据源,但是使用的不是同一个连接:如使用了dataSource.getConnection直接获取连接,就不会启用事务,需要使用Spring-hibernate的框架提供的方式操作数据库;

3)线程问题:AOP控制与逻辑代码获取连接实际上是通过ThreadLocal的方式共享链接的,失去了这个条件(比如你的代码里面New thread了),也是不会共享连接的。

题主需要从Spring事务的原理出发,才能知道是为什么。

mingxuxu
mingxuxu 如果只配置了一个数据源、又没有启用新线程去访问数据库........个人觉得你在继承Hibernate的时候可能是有问题的,不好断定问题的具体地方, 但是可以进行深层次的Debug, 是否拦截成功了&使用的Connection是否是同一个。
5 年多之前 回复
weixin_42510261
weixin_42510261 首先非常感谢。 我现在只配置了一个数据源,所以主要的还在于后面的两个问题,但是不知道如何定位。把我的配置贴出来,就是想让大神们给看看,是不是spring集成时出现的问题,配置使用的类是不是不合适?
5 年多之前 回复

注解方式的事务不是这么配置的,

weixin_42510261
weixin_42510261 粘贴出来的是采用配置方式,全注解的也测试过,没有效果。
5 年多之前 回复

检查数据库是否支持事务,如果用的是MySQL,默认不支持事务。

weixin_42510261
weixin_42510261 使用的是oracle,如果是数据库的话,是不是也应该在错误中有描述?
5 年多之前 回复

1、在save方法后面加上REQUIRED
2、在service实现类throw new RuntimeException()

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问