我有一个使用事务服务的Spring / Hibernate应用程序,我对使用新传播时事务如何工作有点困惑:
@Transactional
method A()
|
|-loop for each element
|
|-@Transactional(propagation=Propagation.REQUIRES_NEW)
method B()
|-make some entity change and save()
因此,您可以看到我有一个实体循环,每个实体都在一个具有NEW事务的单独方法中处理。请确认我的假设:
答案 0 :(得分:3)
如果方法B中存在异常,则在方法A返回时,不应将此方法中所做的所有更改保存到DB。
不,已经在方法B中提交的更改将保持提交。例如,如果循环中有10个步骤并且在步骤4中发生异常,则将保存在步骤1-3中所做的更改。
如果方法B中没有异常,则方法B中所做的更改将立即提交给DB,即使方法A导致父事务。
完全
PS。确保使用Spring调用methodB(),而不仅仅是Java调用。最简单的方法是将methodB()放在另一个类中,与methodA()不同。另一种方法是使用@Resource注释,但它看起来有点棘手。