我正在使用 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,未设置。现在,如果我查询这个序列,我发现它被击中了这么多次,它在 189 处......
实际的例外是当我尝试这样做时:
entityRepository.refresh(entity);
那是当我得到表明该实体不受管理的异常时。正如我所指出的,我可以看到根据日志激活了事务拦截器。
有任何想法吗?