我是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对象,其所有元素都引用空。
Location object
private String LocationAddress;
@ManyToOne
@JoinColumn(name = "CITYID")
private City city;
City
private String cityName;
private int cityId;在位置表中,CityID是可以为空的字段,因为city不是必填字段。我们有一个城市表,这是一个静态的表,所以我们不想在城市表中插入数据。现在,当我们存储位置对象时。如果city对象像某些城市一样有一些值,那么它可以很好地存储数据。但当object包含空对象(cityName和cityId为空)时抛出异常
请帮帮忙。
示例场景
Successful
Location
locationAddress = "test Address"
city
cityId="1"
cityName="testCity"
Failure
Location
locationAddress = "test Address"
city
cityId=null
cityName=null发布于 2013-01-25 06:52:29
在没有看到代码的情况下很难确定,但听起来您在保存Location类之前并没有保存City。持久化有两种选择:
您可以使用@Cascade注释使插入级联从父级到子级。这样做,您只需持久化Location类,而Hibernate将负责其余的工作。
@ManyToOne
@JoinColumn(name = "CITYID")
@Cascade(CascadeType.PERSIST) //Or ALL if you want Updates, Deletes to go to
private City city;有关@Cascade here的更多信息。
如果您不想这样做,则需要在保存Location之前显式地持久化City类。
发布于 2013-01-25 07:06:48
如果您试图保存一个实际引用no City的Location实例,那么您应该让Location.City引用null,而不是创建一个字段为null的City实例。
( Hibernate会将字段为null的City实例视为您希望在cities表中记录列值为null的新记录-这没有多大意义)
https://stackoverflow.com/questions/14512167
复制相似问题