我正在使用Wildfly 10和Deltaspike,但在持久化一个实体时遇到了问题。稍后,当我尝试刷新它或持久化引用它的另一个实体时,问题就出现了。当我尝试刷新它时,我得到了一个异常,指示该实体不是托管的。如果我试图持久化引用它的另一个实体,那就是当我得到指示该实体处于瞬态的异常时。
我使用的是JTA,这个实体应该早点提交,因为它是在另一个方法调用中保存的。
我尝试过使用容器管理的事务和Bean管理的事务。在这一点上,似乎只有apache-deltaspike.properties文件对更改这一点有任何影响。我还手动启用了事务拦截器,但我不认为这有什么不同,因为在beans.xml中启用它时可以显式激活它,也可以不显式激活它。@ transaction注解似乎并没有实际提交事务(我使用不同的参数对其进行了测试,我本以为会出现不同的异常,但还是使用相同的异常)。
@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);也就是说,当我收到指示实体不是托管实体的异常时。正如我所指出的,我可以看到根据日志激活了事务拦截器。
有什么想法吗?
发布于 2017-02-23 01:37:44
这个问题似乎出现在更新版本的hibernate中,您不能对id / version字段使用原语类型。
我现在可以保存实体了。
https://stackoverflow.com/questions/42382587
复制相似问题