每次调用EntityManager.createQuery()
或EntityManager.createNamedQuery()
调用时都会出现NullPointerException .
我正在使用Glassfish 4.0,Hibernate 4.3.5和EJB.
我有以下层次结构:
DaoTemplate我有PersistenceContext和泛型方法
@Singleton
public class DaoTemplate<T extends IdEntityInterface> {
@PersistenceContext(unitName = "pu_name")
protected EntityManager em;
....
}
Run Code Online (Sandbox Code Playgroud)
带构造函数的抽象类beacuse bean不能扩展另一个bean.
public abstract class AbstractDaoTemplate<T extends IdEntityInterface> extends DaoTemplate<T> {
public AbstractDaoTemplate(Class<T> entityClass) {
super(entityClass);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有Dao.
@Singleton
public class SomeDao extends AbstractDaoTemplate<SomeEntity> {
public SomeDao() {
super(SomeEntity.class)
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public List<SomeEntity> someDaoMethod() {
...
em.createQuery("SomeQuery");
...
}
}
Run Code Online (Sandbox Code Playgroud)
当调用someDaoMethod时,NullPointerException被抛出,em.createQuery("SomeQuery")
但em
不是null.
我也尝试em.createQuery("SomeQuery")
从调试器窗口调用,这里是输出:
Exception occurred in target VM: …
Run Code Online (Sandbox Code Playgroud)