gpt4 book ai didi

java - @PersistenceContext 始终为 null

转载 作者:行者123 更新时间:2023-11-30 03:28:02 26 4
gpt4 key购买 nike

我正在尝试使用 Delta Spike (@RunWith(CdiTestRunner.class)) 在单元测试中让 CDI(使用 Open Web Beans)工作。依赖注入(inject)工作正常,但我的 EntityManagerFactory 始终为空:

public class EntityManagerProducer {

@PersistenceContext(unitName = "sbPersistenceUnit")
private EntityManagerFactory emf; //Always null

@Produces
public EntityManager create() {
return emf.createEntityManager();
}

public void close(@Disposes EntityManager em) {
if (em.isOpen()) {
em.close();
}
}
}

我知道我的 persistence.xml 没问题,因为我可以手动创建 session 工厂:

EntityManagerFactory test = Persistence.createEntityManagerFactory("sbPersistenceUnit");

所有其他注入(inject)都工作正常。有人知道可能缺少什么吗?

最佳答案

在单元测试中,您并不处于托管环境中。OpenWebBeans 将通过 openwebbeans-resource 模块 + @PersistenceUnit 支持它,但这不可移植。所以你需要使用例如:

@Specializes
public class TestEntityManagerProducer extends EntityManagerProducer {
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("...");

@Produces
//...
@Override
protected EntityManager create() {
return emf.createEntityManager();
}

@Override
protected void close(@Disposes EntityManager em) {
if (em.isOpen()) {
em.close();
}
}
}

在测试类路径中

如果您在他们的邮件列表上提出此类问题,您很快就会得到答案。

关于java - @PersistenceContext 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29702808/

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