我正在使用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。
有什么想法吗?
答案 0 :(得分:1)
问题似乎是在较新版本的hibernate中,你不能使用基本类型作为id / version字段。
我现在能够保存实体。