Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.transientObject异常:hibernate_Java_Hibernate - Fatal编程技术网

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就会在再次加载该对象时忽略它。