`

hibernate 常见的几个问题(二)

阅读更多

org.hibernate.TransientObjectException: entity.User

exception   
 
javax.servlet.ServletException: org.springframework.dao.InvalidDataAccessApiUsageException: entity.User; nested exception is org.hibernate.TransientObjectException: entity.User  
    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)  
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)  
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)  
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)  
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)  
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)  
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  
    web.tools.UTF8.doFilter(UTF8.java:16)  
 
 
root cause   
 
org.springframework.dao.InvalidDataAccessApiUsageException: entity.User; nested exception is org.hibernate.TransientObjectException: entity.User  
    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:634)  
    org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:714)  
    org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:583)  
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)  
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)  
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)  
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)  
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)  
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)  
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)  
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)  
    $Proxy4.addGoods(Unknown Source)  
    web.action.GoodsAction.doAdd(GoodsAction.java:107)  
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
    java.lang.reflect.Method.invoke(Method.java:597)  
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)  
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)  
    org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)  
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)  
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)  
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)  
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)  
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)  
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  
    web.tools.UTF8.doFilter(UTF8.java:16)  
 
 
root cause   
 
org.hibernate.TransientObjectException: entity.User  
    org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)  
    org.hibernate.type.EntityType.getIdentifier(EntityType.java:108)  
    org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221)  
    org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476)  
    org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803)  
    org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467)  
    org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190)  
    org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)  
    org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195)  
    org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)  
    org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)  
    org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)  
    org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)  
    org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)  
    org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:575)  
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)  
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)  
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)  
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)  
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)  
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)  
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)  
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)  
    $Proxy4.addGoods(Unknown Source)  
    web.action.GoodsAction.doAdd(GoodsAction.java:107)  
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
    java.lang.reflect.Method.invoke(Method.java:597)  
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)  
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)  
    org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)  
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)  
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)  
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)  
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)  
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)  
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  
    web.tools.UTF8.doFilter(UTF8.java:16) 
exception

javax.servlet.ServletException: org.springframework.dao.InvalidDataAccessApiUsageException: entity.User; nested exception is org.hibernate.TransientObjectException: entity.User
 org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 web.tools.UTF8.doFilter(UTF8.java:16)


root cause

org.springframework.dao.InvalidDataAccessApiUsageException: entity.User; nested exception is org.hibernate.TransientObjectException: entity.User
 org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:634)
 org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:714)
 org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:583)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
 org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)
 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
 $Proxy4.addGoods(Unknown Source)
 web.action.GoodsAction.doAdd(GoodsAction.java:107)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 java.lang.reflect.Method.invoke(Method.java:597)
 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
 org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
 org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 web.tools.UTF8.doFilter(UTF8.java:16)


root cause

org.hibernate.TransientObjectException: entity.User
 org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)
 org.hibernate.type.EntityType.getIdentifier(EntityType.java:108)
 org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221)
 org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476)
 org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803)
 org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467)
 org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190)
 org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)
 org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195)
 org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
 org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
 org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:575)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
 org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
 org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)
 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
 $Proxy4.addGoods(Unknown Source)
 web.action.GoodsAction.doAdd(GoodsAction.java:107)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 java.lang.reflect.Method.invoke(Method.java:597)
 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
 org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
 org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 web.tools.UTF8.doFilter(UTF8.java:16)

 

这个错误让我郁闷了好一段时间,现在终于搞懂了是什么缘故了!!!

update item之前 执行了item.setUserByBuyerId(new User()),此时的item是persistent状态,而userByBuyerId属性是一个transient状态的对象,并且cascade为默认的"none"(如果是all那么会试图创建一个新的User对象),所以无法更新item。

<--都是 spring 的 formbackingObject 惹的麻烦,害我debuge了好长时间,希望大家不要再范类似错误了。-->

解决方案:从数据库中获取entity.User实例,而不能用new。

说明下,我的Good FormBean中有两个属性是用到User的Id这个外键的,所以在改造Good FormBean构造方法时,如果有一个属性允许为空,则不能用new创建这个实例(列:item.setUserBySalerId(new User()),若userBySalerId属性允许为空,就不用这样写了,直接去掉就好了)

(总之:更新从表时,主表的主键必须有值)

分享到:
评论

相关推荐

    Hibernate几个常见错误解决方式

    这个错误表明Hibernate尝试访问的数据库表中不存在名为`isupdate`的列。解决方法是检查Hibernate的映射文件(如.hbm.xml或使用注解的方式),确保实体类中的`isupdate`属性正确地映射到了数据库表的相应列。如果...

    hibernate常见错误解决方案

    ### Hibernate常见错误解决方案 在开发基于Hibernate框架的应用程序时,我们经常会遇到各种各样的异常情况。这些异常不仅会影响系统的正常运行,还可能增加调试难度。本文将针对几个常见的Hibernate异常进行详细...

    常见hibernate面试题.doc

    ### 常见Hibernate面试题知识点详解 #### 1. Hibernate查询数据的方式 - **导航对象图查询**:这是最基本的查询方式之一,适用于查询对象之间的关联关系。通过已知对象来导航到其他对象,比如通过一个`User`对象...

    hibernate+mysql乱码问题

    例如,`set names gbk` 是MySQL中设置客户端、连接和结果集编码为GBK的命令,而GBK是中文的一个常见编码方式。如果你的数据源是UTF-8编码的,但数据库使用GBK,那么在传输过程中可能会出现乱码。 在Hibernate配置...

    Hibernate二级缓存+分页功能

    1. **Query.setFirstResult() 和 Query.setMaxResults()**:这是Hibernate原生的分页方式,`setFirstResult()` 设置从第几个结果开始,`setMaxResults()` 设置最多返回多少个结果。 2. **Criteria API的createAlias...

    Hibernate映射导致的几个异常

    这是Hibernate懒加载机制中的常见异常,当尝试访问一个已被关闭的Session中的懒加载属性时触发。例如,如果Session在使用`setFetchMode(FetchMode.LAZY)`后关闭,而之后又试图访问该Session管理的某个对象的懒加载...

    Hibernate连表查询 Hibernate连表查询

    下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发人员将Java对象模型映射到数据库表,并在对象和数据库之间...

    hibernate 的createSQLQuery的几种用法

    下面是 createSQLQuery 的几种常见用法: 一、简单的 SQLQuery 在最简单的情况下,我们可以使用 createSQLQuery 方法来执行一个简单的 SQL 查询,例如: ```java List cats = sess.createSQLQuery("select * from ...

    hibernate基础 入门/ hibernate basic

    **Hibernate架构**是围绕着几个核心组件构建的,这些组件共同协作,为开发者提供了一个强大的持久层解决方案。以下是Hibernate架构的主要组成部分: 1. **SessionFactory**:这是Hibernate框架中最核心的工厂类,它...

    Hibernate知识点总结

    在Hibernate中,对象持久化的具体含义包括以下几个方面: - **保存**:将对象状态存储到数据库中。 - **更新**:更新数据库中对象的状态。 - **删除**:从数据库中移除对象。 - **查询**:根据某些条件从数据库中...

    hibernate_reference使用指南全

    Hibernate 是一个开源的对象关系映射 (ORM) 框架,它为 Java 应用程序提供了一种将 Java 对象映射到关系型数据库表中的机制。本章节将详细介绍如何从零开始创建一个简单的 Hibernate 应用程序。 **1.2 第一个 ...

    hibernate中文参考文档

    7. 组件映射:当一个类的属性是由其他几个类的属性组合而成时,可以使用组件映射。这部分内容将说明如何实现组件映射,以组合不同的属性到一个复合对象。 8. 继承映射:Hibernate支持不同类型的继承映射策略,包括...

    hibernate search

    - **依赖**:该库依赖于其他几个库文件,例如 Lucene 和 Hibernate Core。 - **用途**:用于实现全文检索功能,如索引创建、查询执行等。 2. **lucene-core.jar**: - **功能**:Lucene 是一个高性能的全文检索...

    Hibernate.3.6.10帮助文档

    11. **最佳实践**:分享了在实际开发中使用Hibernate的一些最佳实践和注意事项,帮助开发者避免常见问题。 这个文档是Hibernate开发者的重要参考资料,无论是初学者还是有经验的开发者,都能从中获取到实用的信息和...

    Hibernate电子书(全)

    构建第一个Hibernate程序通常包括以下几个步骤:定义实体类,创建映射文件,配置Hibernate,初始化SessionFactory,执行CRUD(创建、读取、更新、删除)操作。通过这个过程,开发者可以熟悉Hibernate的基本工作流程...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

    解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题

    在使用Hibernate进行数据库操作时,有时会遇到一个常见的问题,即当从数据库中查询Date类型的数据并由Hibernate返回时,发现结果中的时分秒部分不正确。这个问题通常源于多个因素,包括日期时间的序列化与反序列化...

    Hibernate4.1环境搭建

    在构建现代Web应用程序时,集成Spring框架、Struts2以及Hibernate等技术是非常常见的选择。这些技术的组合通常被称为SSH(Spring + Struts + Hibernate),是一种非常强大的开发模式,能够帮助开发者高效地构建出...

    Hibernate 1+N问题详解

    而在对象关系映射(Object-Relational Mapping,简称ORM)框架如Hibernate中,这种关系同样很常见。在Hibernate中,通常使用`ManyToOne`和`OneToMany`来表示这种关系。 根据题目中的描述,“Hibernate的两个类设置...

Global site tag (gtag.js) - Google Analytics