.
.
.
.
.
今天在對兩張一對多關系的表進行增加數據時,其中主表的數據增加成功了,但是子表卻沒有數據,這是什么原因導致的呢?在網上查詢了一番之后,找到了一個解決的辦法:將主表的 .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"(這句話是推測)。