我有两个用事务注释的方法(它们位于同一级别 - 具有相同的父事务,如下所示):
@javax.transaction.Transactional
persist() {
persistEntities1()
persistEntities2()
}
@javax.transaction.Transactional(value = Transactional.TxType.REQUIRES_NEW)
persistEntities1() {}
@javax.transaction.Transactional(value = Transactional.TxType.REQUIRES_NEW)
persistEntities2() {}
在persistEntities1中一切正常,EntityManager实例上有一个合并调用。 在persistEntities2中有一个未捕获的异常。
问题:应该在persistEntities1中持久化的实体没有被持久化。
为什么会发生这种情况?我认为 REQUIRES_NEW 确保事务在方法结束时提交。
我正在使用 Wildfly 8.2。
最佳答案
解决方案是将 persistEntities1
和 persistEntities2
方法移至单独的 bean。现在行为符合预期。
如果子方法与父方法位于同一个 bean 中,则这个特定的 jpa 实现似乎会忽略子事务注释。
关于java - 方法结束时事务未提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28052181/