Java org.hibernate.transientObject异常:hibernate
我刚刚开始冬眠,在这里我被一种暂时的异常所困扰。请帮忙 保存对象时发生异常Java org.hibernate.transientObject异常:hibernate,java,hibernate,Java,Hibernate,我刚刚开始冬眠,在这里我被一种暂时的异常所困扰。请帮忙 保存对象时发生异常位置对象引用未保存的--瞬态实例-刷新前保存瞬态实例:;嵌套异常为org.hibernate.transientObject异常:对象引用未保存的临时实例-刷新前保存临时实例 当我试图将数据保存到我的location表中时,我得到了以上的解释。location表有一个City对象,其所有元素都引用null Location object private String LocationAddress;
位置
对象引用未保存的--瞬态实例-刷新前保存瞬态实例:;嵌套异常为org.hibernate.transientObject异常:对象引用未保存的临时实例-刷新前保存临时实例
当我试图将数据保存到我的location表中时,我得到了以上的解释。location表有一个City对象,其所有元素都引用null
Location object
private String LocationAddress;
@ManyToOne
@JoinColumn(name = "CITYID")
private City city;
City
private String cityName;
private int cityId;
位置表CityID
中的字段可为空,因为city
不是必填字段。我们有一个城市表,它是一个静态表,所以我们不想在城市表中插入数据。
现在,当我们存储位置对象时。如果城市对象具有某些值(如某个城市),它会很好地存储数据。但当对象包含空白对象时引发异常(cityName
和cityId
为空)
请帮忙
示例场景
Successful
Location
locationAddress = "test Address"
city
cityId="1"
cityName="testCity"
Failure
Location
locationAddress = "test Address"
city
cityId=null
cityName=null
在没有看到代码的情况下很难确定,但听起来您在保存
位置
类之前没有保存城市
。您有两个持久化选项:
您可以使用@Cascade
注释从父级插入到子级。这样做,您只需持久化位置
类,其余部分由Hibernate处理
@ManyToOne
@JoinColumn(name = "CITYID")
@Cascade(CascadeType.PERSIST) //Or ALL if you want Updates, Deletes to go to
private City city;
更多关于@Cascade
如果不想这样做,则需要在保存
位置之前显式地持久化城市
类 如果您试图保存一个实际引用了否城市的位置实例,那么您应该有位置。城市引用空,而不是创建一个城市实例,其中字段为空
(Hibernate将City
字段为null
的实例视为cities
表中的一个新记录,其中列值为null
——这没有多大意义)看看这个线程:@yair,City对象有时有值,有时没有值,这是由JSFbean控制的,所以我不能将其设为null,除非我进行if检查。。。。。然而,使其为空也不能解决问题。。。当我将其设为null时,hibernate开始查找城市对象。@user1422423如果Location.city
为null
,hibernate没有要查找的对象。。。除非你在存钱的时候做了什么特别的事。您可以演示如何保存位置
对象吗?很抱歉,我错过了有关您尝试在何处存储标识符为空的城市
类的部分@Yair是对的,您需要将city
设置为null。如果您不想以编程方式执行此操作,可以在位置的方法上使用@PrePersist
注释,例如:@PrePersist public void PrePersist(){If(city.cityId==null)city=null;}
。然后它应该保存,只要city\u id
列在Location表中,Hibernate就会在再次加载该对象时忽略它。