带有 Oracle Database 18c 的 Weblogic 12c:setTransactionOnly() 在事务错误时调用

Weblogic 12c with Oracle Database 18c: setTransactionOnly() called on transaction error

我有一个企业应用程序,其中包含一些 JPA 2.1 实体。我通过来自 WebLogic 的已注册 JNDI 数据源访问数据库。 JPA 实现是 Hibernate 5.2.17。我正在使用 Spring Data JPA 来简化数据库访问。

相关实体:

public class PermissionEntity implements Serializable {
    private static final long serialVersionUID = -3862680194592486778L;

    @Id
    @GeneratedValue
    private Long id;

    @Column(unique = true)
    private String permission;

    @ManyToMany
    private List<RoleEntity> roles;
}

当我尝试插入新实体时,我从 WebLogic 收到以下异常:weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction

其他实体不会发生此错误。无论是在这个还是在其他 EAR 中,理论上所有配置都是相同的。

这可能是违反约束或其他原因。 为了理解问题,请在托管服务器启动参数上设置以下标志:

-Dweblogic.transaction.allowOverrideSetRollbackReason=true

这样您应该会得到一个错误堆栈,其中包含有关容器事务失败的更多相关信息。