首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.hibernate.TransientObjectException:Hibernate

org.hibernate.TransientObjectException:Hibernate
EN

Stack Overflow用户
提问于 2013-01-25 06:41:24
回答 2查看 365关注 0票数 0

我是Hibernate的新手,在这里我遇到了一个短暂的异常。请帮帮忙。

保存对象时发生异常Location对象引用了未保存的对象--临时实例--刷新前保存临时实例:<City object>; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing

当我试图将数据保存到我的location表中时,我得到了上述exeption,该表有一个City对象,其所有元素都引用空。

代码语言:javascript
复制
Location object       
   private String LocationAddress;  
   @ManyToOne
   @JoinColumn(name = "CITYID")
   private City city;


City
   private String cityName;
   private int cityId;

在位置表中,CityID是可以为空的字段,因为city不是必填字段。我们有一个城市表,这是一个静态的表,所以我们不想在城市表中插入数据。现在,当我们存储位置对象时。如果city对象像某些城市一样有一些值,那么它可以很好地存储数据。但当object包含空对象(cityNamecityId为空)时抛出异常

请帮帮忙。

示例场景

代码语言:javascript
复制
Successful
      Location 
       locationAddress = "test Address"
        city 
           cityId="1"
           cityName="testCity"

Failure
      Location 
           locationAddress = "test Address"
           city 
               cityId=null
               cityName=null
EN

回答 2

Stack Overflow用户

发布于 2013-01-25 06:52:29

在没有看到代码的情况下很难确定,但听起来您在保存Location类之前并没有保存City。持久化有两种选择:

您可以使用@Cascade注释使插入级联从父级到子级。这样做,您只需持久化Location类,而Hibernate将负责其余的工作。

代码语言:javascript
复制
@ManyToOne
@JoinColumn(name = "CITYID")
@Cascade(CascadeType.PERSIST)  //Or ALL if you want Updates, Deletes to go to
private City city;

有关@Cascade here的更多信息。

如果您不想这样做,则需要在保存Location之前显式地持久化City类。

票数 0
EN

Stack Overflow用户

发布于 2013-01-25 07:06:48

如果您试图保存一个实际引用no CityLocation实例,那么您应该让Location.City引用null,而不是创建一个字段为nullCity实例。

( Hibernate会将字段为nullCity实例视为您希望在cities表中记录列值为null的新记录-这没有多大意义)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14512167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档