EntityManager注入 - NullPointerException [英] EntityManager injection - NullPointerException
问题描述
在我的Spring + JPA / Hibernate + Wicket应用程序中,我有一个QueryBuilder bean,我想在我的一个DAO中使用它,它在Criteria API的帮助下生成一个类型查询:
In my Spring+JPA/Hibernate+Wicket app, I have a QueryBuilder bean that I want to use in one of my DAOs which generates a typed query with the help of Criteria API:
@Service(value="inboxQueryBuilder")
public class InboxQueryBuilder {
@PersistenceContext
EntityManager em;
CriteriaBuilder cb;
public InboxQueryBuilder() {
cb = em.getCriteriaBuilder();
}
public TypedQuery<App> getQueryForApps(AppSearchObject aso) {
...
}
...
}
然而,当我运行应用程序时,我得到一行的空指针异常:
However, when I run the app, I get a null pointer exception for line:
cb = em.getCriteriaBuilder();
即。 EntityManager不会被注入。你知道为什么吗?
i.e. the EntityManager doesn't get injected. Do you know why?
另外,这个用法是正确的还是线程安全的还是我应该为每个查询实例化我的InboxQueryBuilder?在这种情况下,我是否应该注入EntityManager或者我应该将它作为构造函数参数传递(InboxQueryBuilder将为DAO中的每个查询实例化,其中有一个注入的EntityManager实例)?
Also, is this use correct and thread-safe or should I instantiate my InboxQueryBuilder for each query? In that case, should I also inject the EntityManager or should I just pass it as a constructor parameter (the InboxQueryBuilder would get instantiated for each query in the DAO which has an injected instance of EntityManager)?
推荐答案
您无法在构造函数中访问EntityManager。看一下@ PostConstruct-Annotation
You can't access the EntityManager within the constructor. Take a look at the @PostConstruct-Annotation
@Service(value="inboxQueryBuilder")
public class InboxQueryBuilder {
@PersistenceContext
EntityManager em;
CriteriaBuilder cb;
public InboxQueryBuilder() {
// em= null
}
@PostConstruct
public void toSomething(){
// em set by Container
cb = em.getCriteriaBuilder();
}
public TypedQuery<App> getQueryForApps(AppSearchObject aso) {
...
}
...
}
编辑:
再次阅读你的帖子后,我开始变得不确定,如果我是对的。我知道JBoss中的Java EE-Dependency-Injection正如我所描述的那样工作,但我不确定spring-IOC。
After reading your post again, I start to became unsure, if I'm right. I know the Java EE-Dependency-Injection within a JBoss works as I described, but I'm not sure about spring-IOC.
这篇关于EntityManager注入 - NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!