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"(这句话是推测)

原文地址:https://www.cnblogs.com/0xcafebabe/p/2437604.html