简体   繁体   English

使用 JPA 和休眠查询数据时出现 NullPointerException

[英]NullPointerException while query data using JPA with hibernate

I can't reproduce it locally, but randomly happened in the production environment.本地无法复现,生产环境中随机发生。 The step is new an entity A, set some attributes, then find B by JPA, but it throw exceptions.该步骤是新建一个实体A,设置一些属性,然后通过JPA查找B,但它抛出异常。

the pseudo-code:伪代码:

@Transaction
public void saveData(){
  A a = new A();
  a.setXX("xx");
  B b = bRepository.findFirstByImei("xxx");
  xxxx
  aRepository.save(a);
}

Here is the exception:这是例外:

java.lang.NullPointerException: null
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:81)
    at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:50)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
    at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1327)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1407)
    at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1625)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1593)
    at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1641)
    at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:111)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:196)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143)
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at datadog.trace.instrumentation.springdata.RepositoryInterceptor.invoke(RepositoryInterceptor.java:41)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
    at com.sun.proxy.$Proxy251.findFirstByImei(Unknown Source)

Sounds like a concurrency issue.听起来像是并发问题。 Make sure you do not share the same Session / EntityManager with different threads.确保您没有与不同的线程共享同一个Session / EntityManager Every thread, or even better, every transaction should have its own Session / EntityManager .每个线程,甚至更好,每个事务都应该有自己的Session / EntityManager

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 spring JPA 中使用 @Query 从 db 获取数据时出现 java.lang.NullPointerException。 虽然查询返回 MySql 中的数据 - java.lang.NullPointerException while getting data from db using @Query in spring JPA. Though query returns data in MySql NullPointerException & Error Creating bean with name 'entityManagerFactory' from Hibernate Configuration class(使用 spring 数据 jpa) - NullPointerException & Error creating bean with name 'entityManagerFactory' from Hibernate Configuration class (using spring data jpa) 使用Spring Data查询和Hibernate时的NoViableAltException - NoViableAltException while using Spring Data query with Hibernate 使用Hibernate JPA 2.1将应用程序部署到IBM WebSphere会产生NullPointerException - Deploying application using Hibernate JPA 2.1 to IBM WebSphere gives NullPointerException JPA,Hibernate:查找抛出NullPointerException - JPA, Hibernate: find throws NullPointerException Spring数据的自定义保存查询(Hibernate JPA) - custom save query for Spring Data (Hibernate JPA) 使用JPA和Hibernate与GROUP BY查询一起使用ORDER BY - ORDER BY with GROUP BY query, using JPA and Hibernate 将 TIMESTAMPDIFF 与 JPA 条件查询一起使用,并将休眠作为提供程序 - Using TIMESTAMPDIFF with JPA criteria query and hibernate as the provider 使用更新命名查询时,如何解决JPA / Hibernate中的“封装表达式丢失”错误? - How to fix “The Encapsulated Expression is Missing” error in JPA/Hibernate while using Update Named Query? 休眠查询NullPointerException(@ManyToMany) - Hibernate Query NullPointerException (@ManyToMany)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM