Hibernate 异常:object references an unsaved transient instance - save the transient instance before flushing
.
.
.
.
.
今天在对两张一对多关系的表进行增加数据时,其中主表的数据增加成功了,但是子表却没有数据,这是什么原因导致的呢?在网上查询了一番之后,找到了一个解决的办法:将主表的 .hbm.xml 中的set设置为 inverse="false" 即可。
inverse 是反转的意思,而 inverse="false" 则代表主控方为主表,这样将由主控方来维护关联关系(控制权交给了 One 方)。也就是当主表进行更新时,关联的子表也会进行更新。
但是做了如上的更改之后,保存的时候却又发生了以下异常:
object references an unsaved transient instance - save the transient instance before flushing: cn.lastcc.entity.OutTrade;
再次在网上查阅资料,解决的方法是在主控方的 set 标签上把 cascade 属性修改为"save-update" 即可。
而 cascade 属性如何使用呢?以下是该属性的值。
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。(默认值)
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
由于默认使用的是 none ,所以当主表级联更新子表时,主表处于瞬时状态,因此需要将其设置为"save-update"(这句话是推测)。
作者:dybai
出自:https://0xcafebabe.cnblogs.com
赞赏:3Ky9q5HVGpYseBPAUTvbJBvM3h3FQ3edqr(BTC)
本作品采用知识共享署名-相同方式共享 3.0 中国大陆许可协议进行许可。
欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
posted on 2012-04-08 14:18 0xCAFEBABE 阅读(13587) 评论(0) 编辑 收藏 举报