java - 方法结束时事务未提交

标签 java jakarta-ee jpa jboss wildfly

我有两个用事务注释的方法(它们位于同一级别 - 具有相同的父事务,如下所示):

@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。

最佳答案

解决方案是将 persistEntities1persistEntities2 方法移至单独的 bean。现在行为符合预期。

如果子方法与父方法位于同一个 bean 中,则这个特定的 jpa 实现似乎会忽略子事务注释。

关于java - 方法结束时事务未提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28052181/

相关文章:

java - DataNucleus 中的@Convert

java - 错误: non-static method get(Object) cannot be referenced from a static context

java - Gradle Hibernate 配置需要映射类

java - SparkJava 与 Gradle 上的 AppEngine

java - 什么是持久性上下文?

java - 在 where 语句中使用集合的 JPA 查询

c# - 检查一个字符串是否存在于另一个字符串中的测试用例

java - 使用 sAMAccountName 更改 LDAP 中的密码

java - 在 eventStartTime 三天前发送电子邮件

java - 核心 J2EE 模式和实践是否仍然值得阅读?