欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于save the transient instance before flushing

程序员文章站 2022-04-12 20:59:58
...

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

 

     碰到这个问题有一阵子了,今天花了一天时间,总算是解决了,虽然不是很明白原理是什么,期待大神指导关于save the transient instance before flushing

       现在又两个类Child和Parent,代码(简版)如下:

       

public class Child {
    private String id;
    //版本控制字段
    private Integer version;
    private String name;
    private Parent parent;
}

 

public class Parent {
    private String id;
    //版本控制字段
    private Integer version;
    private String name;
    private Set<Child> children;
}

 

    这个异常发生在manytoone关系上,比如:保存child。

 

   这里顺便提下这个场景会发生的问题:

<input name='child.parent.id' value=''>

    由于html表单提交的时候,没有复制的字段默认是空串,提交的parent id 是空的肯定会报错,网上有人说设置:optional = true(配置文件对应not-null=false)这是解决不了问题的,因为你页面还是提交了一个空值给后台,所以如果不设置parent则在页面不提交child.parent.id,这个可以用js控制(disabled)。

 

 

  进入正题问题重现parent:我要保存child并关联parent

 

<input name='child.parent.id' value='xxx'>

  依然抛出异常:object references an unsaved transient instance - save the transient instance before flushing     

   在*上看到说:去掉version版本控制字段,就可以啦!试了下果然保存成功,但是我想如果我又想保留版本字段呢?我就手动随便设置了一个版本号,居然也成功了!

   最后我把private Integer version;改成private Integer version=0;问题解决。

  具体原因还需要深究下,肯定是和版本号有关系了。希望路过的大神指导一下。

 

    

   

相关标签: hibernate 异常