在我的 Spring+JPA/Hibernate+Wicket 应用程序中,我有一个 QueryBuilder bean,我想在我的一个 DAO 中使用它,它在 Criteria API 的帮助下生成一个类型化查询:
@Service(value="inboxQueryBuilder")
public class InboxQueryBuilder {
@PersistenceContext
EntityManager em;
CriteriaBuilder cb;
public InboxQueryBuilder() {
cb = em.getCriteriaBuilder();
}
public TypedQuery<App> getQueryForApps(AppSearchObject aso) {
...
}
...
}
但是,当我运行应用程序时,我得到以下行的空指针异常:
cb = em.getCriteriaBuilder();
即EntityManager 没有被注入。你知道为什么吗?
另外,这种用法是否正确且线程安全,还是应该为每个查询实例化我的 InboxQueryBuilder?在这种情况下,我应该也注入 EntityManager 还是应该将它作为构造函数参数传递(InboxQueryBuilder 将为 DAO 中具有注入的 EntityManager 实例的每个查询实例化)?