我正在使用EJB ...我执行以下操作并且我不知道为什么注入的EntityManager无法正常工作。
我的问题是,使用@PersistenceContext注入所有3个EJB的EntityManager无法正常工作。 EJB2中注入的EntityManager没有反映在EJB2中调用persist()。 可能有什么问题? 希望我的问题足够清楚。 现在使用Container托管交易。
答案 0 :(得分:1)
我的问题是,使用@PersistenceContext注入所有3个EJB的EntityManager无法正常工作。在EJB2中调用persist()没有反映在EJB3中注入的EntityManager中。
在Java EE环境中,常见的情况是使用Transaction-Scoped Container-Managed实体管理器。使用这样的实体管理器,持久化上下文在JTA事务传播时传播。
在您的情况下,我怀疑您正在为EJB3的方法使用REQUIRES_NEW
事务属性。所以:
EJB3#bar()
时,容器将暂停为EJB2#foo()
启动的事务并启动新事务EJB3#bar()
调用实体管理器时,将创建新持久性上下文。EJB2#foo()
的事务尚未提交,因此更改对新的持久性上下文不是“可见的”。