我使用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>
任何帮助都将不胜感激。
答案 0 :(得分:3)
EventDaoImpl edi = new EventDaoImpl();
应该是:
@Inject
EventDaoImpl edi;
或:
@EJB
EventDaoImpl edi;
这是因为您已将EventDaoImpl注释为无状态bean。所以你必须把它作为一个bean注入