gpt4 book ai didi

java - JPA、Eclipselink 和 Guice 的 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 14:08:34 26 4
gpt4 key购买 nike

我有一个像这样的 JpaController 类:

public class JpaController
{
@Inject private EntityManager em;

@Transactional
public void create(Message msg)
{
em.persist(msg);
}
}

我正在安装一个com.google.inject.persist.PersistFilter(虽然没有过滤它,因为我此时不在HTTP请求中,它是一个后台线程)。

我还安装了新的 JpaPersistModule(PU)

我认为 EntityManager 已成功填充(尽管我对此没有信心,因为代码没有到达该行)。

抛出的异常来自于@Transactional的拦截器

java.lang.NullPointerException
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.getActivePersistenceContext(EntityManagerImpl.java:1712)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.begin(EntityTransactionImpl.java:49)
at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:62)
at my code - the line that called controller.create(msg);

使用的库:EclipseLink 2.4.1,吉斯3.0,guice-坚持3.0,guice-jndi 3.0,guice-servlet 3.0,MySQL 5.1.25,javax.persistence 2.0.4,Jackson、activemq、lombok、joda-time、javax.mail、javax.inject、asm、jersey、log4j、jettison、jsr311。

最佳答案

直接注入(inject) EntityManager 存在很多问题,可以在没有连接的情况下关闭,...

不要注入(inject) EntityManager,而是尝试通过 guice 提供程序来实现它:

public class JpaController
{
@Inject private Provider<EntityManager> _entityManagerProvider;

@Transactional
public void create(Message msg)
{
_entityManagerProvider.get().persist(msg);
}
}

Teorically ,emProvider.get()将始终通过JpaPersistModule返回有效的EntityManager实例

关于java - JPA、Eclipselink 和 Guice 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716484/

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