【发布时间】:2016-05-23 15:43:25
【问题描述】:
我得到了这个代码。我正在使用 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:发生断言失败(这可能表明 Hibernate 中存在错误,但更可能是由于会话使用不安全):org.hibernate.AssertionFailure:XXXXXX 条目中的 ID 为空(之后不要刷新会话发生异常)
为了解决这个问题,我尝试在标有@Transactional(propagation = Propagation.REQUIRES_NEW) 的新方法中插入错误,因为了解内部事务将完成而外部事务将回滚
但我没有看到预期的输出。
【问题讨论】:
-
正确。确实是重复的
-
@alan-hay - 即使按照原始线程中的说明进行操作,我仍然看到同样的问题。我在单个方法中将其设置为事务性并添加了一个需要新的传播
-
REQUIRES_NEW仅在对另一个对象调用该方法时才有效。如果你在这个类中用REQUIRES_NEW标记了一个方法并从这个类中调用它,它就不起作用。这是由于基于代理的 AOP 的限制。
标签: java spring hibernate jpa transactions