我将 Wildfly 9.0.1 Final 与有效的 JNDI 数据源一起使用。我已经设置了我所有的实体,但我似乎无法让它工作。我正在尝试使用 PersistenceContext 注入(inject) 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 是实体,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 注入(inject)
关于java - JPA EJB PersistenceContext 没有注入(inject) EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33432382/