gpt4 book ai didi

java - EntityManager 注入(inject) - NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:03 24 4
gpt4 key购买 nike

在我的 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 没有被注入(inject)。你知道为什么吗?

此外,这种使用是否正确且线程安全,或者我应该为每个查询实例化我的 InboxQueryBuilder 吗?在那种情况下,我是否还应该注入(inject) EntityManager 还是应该将其作为构造函数参数传递(InboxQueryBuilder 将为 DAO 中具有注入(inject)的 EntityManager 实例的每个查询实例化)?

最佳答案

您不能在构造函数中访问 EntityManager。看看@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。

关于java - EntityManager 注入(inject) - NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com