【问题标题】:Injecting entity manager into managed bean将实体管理器注入托管 bean
【发布时间】:2011-06-11 07:20:00
【问题描述】:

是否可以使用@PersistenceContext(或@PersistenceUnit)将实体管理器(或其工厂)注入到jsf托管bean中?

我试过了,但没有,我得到一个 NullPointerException。

【问题讨论】:

    标签: jsf-2 jpa-2.0


    【解决方案1】:

    是的,这是可能的。这是语法。

    @PersistenceContext
    EntityManager em;
    

    您的项目中需要有一个 persistence.xml。顺便说一句:我正在运行 Glassfish 3。

    在此之后,您可以使用诸如 em.createNamedQuery 之类的方法。

    还要记住注入发生在构造函数之后,因此如果您尝试在构造函数中执行数据库函数,这将不起作用。您必须将 @PostConstruct 注释添加到方法中。这可能是您遇到的问题。

    【讨论】:

    • 请注意,如果注入到 JSF 托管 bean 中,EntityManager 将不会使用容器管理事务 (CMT)。在 Java EE 7 之前,只有 EJB 使用容器管理的事务,并且 Java EE 7 仅将 CMT 扩展到 CDI bean,而不是不推荐使用的 JSF 管理的 bean。换句话说,如果出现错误,容器不会回滚事务:您必须自己管理。 Referencereference.
    • 五个月后,我不确定我之前的评论是否属实。我从未测试过它:我只是从我读到的内容中推断出来的。 :-\
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多