注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

断尘居

温柔的男人像海洋。

 
 
 
 
 

日志

 
 

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing  

2011-12-05 19:53:48|  分类: SSH |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

问题描述:

今天在做Hibernate级联操作的时候报如下错误:

Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.joher.entity.Address

    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)

    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)

    at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265)

    at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:619)

问题分析:

一个Person实体,一个Address实体:

/**
* <p>Datetime : 2011-12-5 上午10:39:46</p>
* @author <a href="http://zhaohe162.blog.163.com">Joher</a>
*
*/

public class Person{
public String Name {get; set;}
public String Surname {get; set;}
public Address Address {get; set;}
...
}


/**
* <p>Datetime : 2011-12-5 上午10:39:46</p>
* @author <a href="http://zhaohe162.blog.163.com">Joher</a>
*
*/
public class Address{
public String Street {get; set;}
public int Zipcode {get; set;}
public String City {get; set;}
...
}

当尝试保存Person实体的时候报错,Hibernate认为Address实体已经存在于数据库中,因为你指向了一个持久化实体对象。

解决方案:

在hbm文件里的对应标签里加上 cascade 属性:

 <many-to-one name="Address" class="com.joher.entity.Address" lazy="false" cascade="all" >
             <column name="addressid" precision="20" scale="0" unique="true"/>
 </many-to-one>

这样就可以实现Person与Address之间的级联操作。

或者在代码中先保存Address实体,如下:

Session session = sessions.openSession();
Transaction transaction = session.beginTransaction();
session.save(person.Address);
session.save(person);
transaction.commit();
session.close();

通过one of 以上两种方法都可以解决此问题。

  评论这张
 
阅读(4045)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017