【发布时间】:2016-05-06 09:17:49
【问题描述】:
我有一个要求,我需要我的嵌套事务是一个新事务,以便只有当前事务会在出现异常的情况下回滚,而不是调用者,并且我还想在嵌套事务中获取保存的实体,这些实体保存在上层事务。
@Transactional(readOnly = false, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void A(){
//saving entity x
B();
}
@Transactional(readOnly = false, isolation = Isolation.DEFAULT, propagation = **Propagation.REQUIRES_NEW**, rollbackFor = Exception.class)
public void B(){
//saving some other entity
//fetch previously created entity x
}
现在的问题是当我尝试获取保存在 A() 中的 B() 中的实体 x 时,我没有得到这个。
但是,如果我将 B() 的 事务类型从 Propagation.REQUIRES_NEW 更改为 Propagation.REQUIRED,它就可以工作。这种情况下的问题是,如果事务 B 回滚,事务 A 也会回滚,但这不是故意的。 请提出一些可以解决这两个用例的解决方案。
【问题讨论】:
标签: database spring hibernate jpa spring-transactions