`
ashnl007
  • 浏览: 14229 次
  • 性别: Icon_minigender_1
  • 来自: 江西南昌
社区版块
存档分类
最新评论

关于save the transient instance before flushing

阅读更多

      org.hibernate.TransientObjectException: object references an unsaved transient instance - 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     

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

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

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

 

    

   

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics