Wildfly - deltaspike - 交易未承诺?

时间:2017-02-22 04:12:27

标签: java-ee jta wildfly-10 deltaspike deltaspike-jpa

我正在使用Wildfly 10和Deltaspike,并且存在持续存在实体的问题。当我尝试刷新它或坚持引用它的另一个实体时,问题就会出现。当我尝试刷新它时,我得到异常,表明实体未被管理。如果我试图坚持引用它的另一个实体,那就是当我得到指示实体处于瞬态的异常时。

我正在使用JTA,并且该实体应该早先提交,因为它已保存在另一个方法调用中。

我尝试过使用容器管理事务和Bean管理事务。在那个注释中,似乎只有apache-deltaspike.properties文件对更改它有任何影响。我也手动启用了事务拦截器,但我不认为这有所不同,因为无论是否在beans.xml中显式激活它都启用它。 @Transactional注释似乎没有实际提交事务(我使用各种参数测试它,我会期望一个不同的异常,但只是去相同的。)

@Transactional(Transactional.TxType.REQUIRES_NEW)
//@Transactional(Transactional.TxType.NEVER)
@Loggable
protected void startSession() {
    entity = new Entity("something");
    LOGGER.warn("entity:" + entity);
    entityRepository.saveAndFlushAndRefresh(entity);

    LOGGER.warn("end - entity:" + entity.getId());
}

日志语句显示id为0,未设置。现在,如果我查询序列,我看到它被击中了这么多次......

实际的例外情况是我尝试这样做:

entityRepository.refresh(entity);

这是我得到异常,表明实体未受管理。正如我所指出的,我可以看到根据日志激活了Transaction Interceptor。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题似乎是在较新版本的hibernate中,你不能使用基本类型作为id / version字段。

我现在能够保存实体。