JPA EJB PersistenceContext没有注入EntityManager

时间:2015-10-30 09:14:45

标签: java hibernate maven jpa

我使用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>

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

EventDaoImpl edi = new EventDaoImpl();

应该是:

@Inject
EventDaoImpl edi;

或:

@EJB
EventDaoImpl edi;

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