我已经将Spring + Hibernate项目配置为使用Spring AOP进行事务处理
当我用TransactionSynchronizationManager.isActualTransactionActive()
检查DAO方法时,它表示正确。
我正在从我的服务类调用两个DAO方法,在第二个DAO方法中,我有意'devide by zero'
抛出一个错误,看看这两个方法是否回滚。
目前第一个似乎插入一个新的记录就好了。不应该第一种方法回滚?
更新的
你可以参考我之前的问题,但我认为这可能太长了
Transaction Management in Spring 3.x and Hibernate 4
总结一下这个问题(尽我所能),
我有一个服务类方法从DAO类调用两个方法
该服务类是从spring mvc控制器及其委托人调用的。
我得到了我的aop:config如下
<aop:config proxy-target-class="true">
<aop:pointcut id="transactionalServiceOperation" expression="execution(* kr.co.sgis.services.web.cooingbee.Crudable.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalServiceOperation"/>
</aop:config>
我的界面Crudable看起来像这样
public interface Crudable {
public int delete(CooingbeeFetchable bean);
public int save(CooingbeeFetchable bean);
public int update(CooingbeeFetchable bean);
public Set<CooingbeeFetchable> list(CooingbeeFetchable bean);
public CooingbeeFetchable get(int id);
public int count(CooingbeeFetchable bean);
public int save2(CooingbeeFetchable bean);
}
两者 DAO和Service类都实现了Cruadable接口。现在我想也许就是这样
是因为它没有像我预期的那样工作?
希望我给你足够的信息,而不是太冗长:)
答案 0 :(得分:0)
如果两种方法都是事务性的,那么第二种方法的失败自然不会影响第一种方法。如果您认为这两种方法都是单个(正确)事务的一部分,那么您就会错误地认为它或者它似乎部分提交的事实。你需要提供更多的信息才能得到一个好的答案,为什么其中一个是真的。
答案 1 :(得分:0)
该文档说你需要为Spring抛出异常,才能知道出错了
使用DAO方法,以便它可以回滚。以前我的DAO方法没有抛出任何异常,而是通过围绕a中的方法体自行处理异常
try-catch block。
另外,你需要像这样配置你的aop:config标签。
<aop:config proxy-target-class="true">
<aop:pointcut id="transactionalServiceOperation" expression="execution(* kr.co.sgis.services.web.cooingbee.Crudable.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalServiceOperation"/>
</aop:config>
我希望这有帮助! :)。
欢呼声