java - 持久化实体时出现 NullPointerException

标签 java spring hibernate

我成功地能够使用 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 不为空。
如有任何帮助,我们将不胜感激。


// 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 核心:4.2.0.Final hibernate-entitymanager:4.1.9.Final

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

关于java - 持久化实体时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058583/

相关文章:

java - 如何根据目标设备分离库?

java - 无法从 GET 请求中获取 JSON

java - Tomcat 数据源 - 连接池

Spring Boot MongoDB 多数据库

java - Hibernate 检索多行并存储在对象数组中

java - 永远不会调用 onFlushDirty Hibernate Interceptor 方法

java - 通过 TestNG 运行 Selenium 时出现空指针异常

java - 计费系统中的多线程

spring - 根据用户名和远程 IP 地址使用不同的 AuthenticationProvider

java - 如何在 hibernate 中将我的 blob 列从 mysql 读取为字符串类型