我是个白痴。过去我已经遇到过这个问题,但是我忘记了。
对于每个在这里遇到相同问题的人,这里都是解决方案。容器管理的事务仅在容器是EJB时有效。如果容器是JSF,则不起作用!注入实体管理器的方式无关紧要,注入成功,但是创建的对象将不起作用。
解决该问题的方法是创建一个EJB DAO对象,该对象将为您处理数据库。就像是
@Named@Statelesspublic class MyDAO {@PersistenceContext(unitName = "SRA")private EntityManager em;public void save(Object o) { em.persist(o); em.flush();}}
然后将这些对象注入托管bean中,如下所示:
@ManagedBean@SessionScopedpublic class MyManagedBean {@EJBprivate MyDAO dao;public void action() {.... dao.save(o);}}
直接将EntityManager注入受管Bean将为您提供所需的交易异常。
我仍然不确定是否将类似的东西注入到范围更广的bean中。稍后我将对此进行研究。



