簡體   English   中英

持久化實體時出現NullPointerException

[英]NullPointerException when persisting entity

我成功地能夠使用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。
任何幫助將不勝感激。


 // Code to update the 'Rate' entity Rate r = rateDao.getRate(); r.setCountry("NA"); rateDao.update(r); // RateDaoImpl code (DAO IMPLEMENTATION CLASS) @Override public Rate getRate() { // named query is : "SELECT rp FROM RatePeriod rp WHERE rp.id = 458" return em.createNamedQuery("Rate.qry", Rate.class).getResultList().get(0); } @Transactional(readOnly=false) @Override public void update(Rate rate) { em.merge(rate); } 

我在同一行中有同樣的例外。 那是因為我使用了不兼容的版本:hibernate-core:4.2.0.Final hibernate-entitymanager:4.1.9.Final

我已將hibernate-core降級為4.1.9.Final並且問題消失了。

這是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  }

在此方法中設置斷點並查看什么是null行71.也許getPersistenceContext()返回null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM