我收到了这段代码。我正在使用spring boot和jpa
@Transactional
public class MyClass {
public void createSomething() {
try {
saveAndFlush();
} catch (Exception e) {
// Since error has occured I want to insert this information
// into a audit table
repository.saveAndFlush();
}
}
}
现在,当异常发生时,事务将回滚,因此不会发生错误表插入。
我正在看
HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: null id in XXXXX entry (don't flush the Session after an exception occurs)
为了解决这个问题,我尝试在标有@Transactional(propagation = Propagation.REQUIRES_NEW)
的新方法中插入错误,理解内部事务将完成,外部将回滚
但我没有看到我想要的输出。
请告知
答案 0 :(得分:1)
从类级别删除@Transactional
,并将其用于实际执行事务的那些方法。 (当然,如果你在该课程中有多个方法)。
如果您希望独立事务提交/回滚到数据库,则在方法上使用REQUIRES_NEW传播,这不会干扰全局事务。
未提及任何传播的'@Transactional'的默认行为是,加入全局(调用)事务(如果有),如果没有启动新事务。
由于您拥有全局事务,因此它将完全回滚。相反,您需要独立交易。