【发布时间】:2017-02-22 04:12:27
【问题描述】:
我在使用 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);
那是当我得到表明实体不受管理的异常时。正如我所指出的,我可以看到根据日志激活了事务拦截器。
有什么想法吗?
【问题讨论】:
标签: jakarta-ee jta wildfly-10 deltaspike deltaspike-jpa