繁体   English   中英

JPA EJB PersistenceContext没有注入EntityManager

[英]JPA EJB PersistenceContext not injecting EntityManager

我正在使用Wildfly 9.0.1 Final和一个可用的JNDI数据源。 我已经设置了所有实体,但我似乎无法让它工作。 我正在尝试使用PersistenceContext注入EntityManager,但它似乎没有工作,它抛出一个空指针异常:

persistence.xml中

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="pu" transaction-type="JTA">
        <jta-data-source>java:jboss/jdbc/ds</jta-data-source>
        <class>EventEntity</class>
        <class>EventDaoImpl</class>
        <properties>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hbm2ddl.auto" value="update"/>
            <property name="hibernate.archive.autodetection" value="class"/>
        </properties>
    </persistence-unit>
</persistence>

EventEntity是Entity,EventDaoImpl是处理它的基本CRUD操作的类:

@Stateless
public class EventDaoImpl {

    @PersistenceContext(unitName = "pu")
    private EntityManager em;

    public List<EventEntity> getEvents() {
        Query q = em.createQuery("SELECT e from EventEntity AS e");
        return q.getResultList();
    }
}

值得一提的是JPA和DaoImpl在一个maven模块中,而我正试图从另一个模块访问它。 依赖关系是正确的。 我正在使用以下代码在另一个类中测试它:

EventDaoImpl edi = new EventDaoImpl();
List<EventEntity> events = edi.getEvents();

我尝试将提供程序指定为persistence.xml文件,如下所示:

<provider>org.hibernate.ejb.HibernatePersistence</provider>

但我的IDE说它无法通过org.hibernate解析任何东西,这很奇怪,因为我在jpa pom.xml中对hibernate设置了maven依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.10.Final</version>
</dependency>

任何帮助,将不胜感激。

EventDaoImpl edi = new EventDaoImpl();

应该:

@Inject
EventDaoImpl edi;

要么:

@EJB
EventDaoImpl edi;

这是因为您已将EventDaoImpl注释为无状态bean。 所以你必须把它作为一个bean注入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM