Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持久化实体时的NullPointerException_Java_Spring_Hibernate - Fatal编程技术网

Java 持久化实体时的NullPointerException

Java 持久化实体时的NullPointerException,java,spring,hibernate,Java,Spring,Hibernate,我能够使用NamedQuery成功检索对象列表。如果我不对对象进行任何修改,然后尝试合并它(使用我的实体管理器),则不会引发异常。但是,如果我更新该实体中的任何字段并尝试将其合并,则会引发以下异常: SEVERE: Servlet.service() for servlet [spring-mvc] in context with path [/EuropCar] threw exception [Request processing failed; nested exception is

我能够使用NamedQuery成功检索对象列表。如果我不对对象进行任何修改,然后尝试合并它(使用我的实体管理器),则不会引发异常。但是,如果我更新该实体中的任何字段并尝试将其合并,则会引发以下异常:

SEVERE: Servlet.service() for servlet [spring-mvc] in context with path [/EuropCar]   threw exception [Request processing failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction] with root cause
java.lang.NullPointerException
    at org.hibernate.ejb.event.EJB3PostUpdateEventListener.handlePostUpdate(EJB3PostUpdateEventListener.java:71)
    at org.hibernate.ejb.event.EJB3PostUpdateEventListener.onPostUpdate(EJB3PostUpdateEventListener.java:67)
    at org.hibernate.action.internal.EntityUpdateAction.postUpdate(EntityUpdateAction.java:248)
    at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:205)
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:276)
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:328)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1233)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:403)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:75)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
我已检查以下内容:
  • 我持久化的实体不是空的。
  • entityManager不为null。
如蒙协助,将不胜感激



这是EJB3PostUpdateEventListener的代码:

70  private void handlePostUpdate(Object entity, EventSource source) {
71      EntityEntry entry = (EntityEntry) source.getPersistenceContext().getEntry( entity );
72      // mimic the preUpdate filter
73      if ( Status.DELETED != entry.getStatus()) {
74          callbackHandler.postUpdate(entity);
75      }
76  }

在此方法中设置一个断点,并查看第71行中的
null
是什么。可能
getPersistenceContext()
返回
null

我在同一行中遇到了相同的异常。这是因为我使用了不兼容的版本: hibernate核心:4.2.0.Final hibernate entitymanager:4.1.9.4最终版本


我已将hibernate core降级为4.1.9.Final,问题消失了。

你能告诉我你使用的是哪个hibernate版本的代码吗?我正在使用hibernate版本4.2.0,用
try/catch
块来捕获真正的异常。@ConstantineNovykov,异常是在我尝试持久化时引发的,不是在我尝试检索对象时引发的(但谢谢)。感谢伟大的建议@user714965,persistenceContext不是null。@StevePaul你是说在调试模式下没有得到NullPointerException吗?很抱歉没有以更清晰的方式回复。getPersistenceContext()仍然返回null。您找到任何修复方法了吗?谢谢-这正是解决方案!有人请适当地标记这个!
70  private void handlePostUpdate(Object entity, EventSource source) {
71      EntityEntry entry = (EntityEntry) source.getPersistenceContext().getEntry( entity );
72      // mimic the preUpdate filter
73      if ( Status.DELETED != entry.getStatus()) {
74          callbackHandler.postUpdate(entity);
75      }
76  }