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"(這句話是推測)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM