天天看點

hibernate 中的Inverse Cascade

inverse 原意:反轉。這裡了解為讓對方做事。也就是inverse=true關系讓對方維護,為false為雙方維護。多對多中維護的意思就是增加或者更新實體記錄時,是否增加或者更新關系表的記錄(當然,此時要求對象中要有set集合,這樣才有意義)。一對多中,是否是表示在多的一方表中增加記錄,

在多對多關系中,cascade表示是否在子表中建立或更新記錄(也就是cascade涉及實體記錄),而inverse表示是否在關系表(intermediary table,不涉及實體記錄)中建立或者更新記錄。

實驗一,多表中Inverse 和Cascade :

多表關系  Graduate   t_gt  Tutor

hibernate 中的Inverse Cascade
hibernate 中的Inverse Cascade
hibernate 中的Inverse Cascade
hibernate 中的Inverse Cascade

學生bean維護了老師bean的set集合,

執行個體化一個學生對象,然後再在其中添加兩個老師對象。

hibernate 中的Inverse Cascade

開始實驗:注意我的inverse和cascade都在Graduate.hbm.xml配置

1、inverse =false  cascade為none(沒有配置)

hibernate 中的Inverse Cascade

可以看出,inverse為false時,graduate和turor都為父表,都可以維護關系,是以save graduate1的時候,會向關系表t_gt中插入表示graduate和turor關系的資料。但是,由于沒有設定cascade=save-update,導緻當hibernate想要向turor表插入set集合中的資料的時候被拒絕了。

2、inverse =true cascade為none(沒有配置)

隻有一條sql語句

hibernate 中的Inverse Cascade

inverse =true,關系由turor去維護,導緻save  graduate1的時候,不用去維護關系表。是以隻産生了一條語句。

3、inverse =false  cascade=save-update

hibernate 中的Inverse Cascade

4、inverse =true cascade=save-update

hibernate 中的Inverse Cascade

inverse =true 關系由turor去維護,cascade=save-update表示允許将graduate1中set集合中的資料插入turor表

實驗二 one to many 

hibernate 中的Inverse Cascade
hibernate 中的Inverse Cascade

測試save user

hibernate 中的Inverse Cascade

實驗開始:注意我的inverse和cascade都在User.hbm.xml配置

1. inverse=false cascade為none

hibernate 中的Inverse Cascade

2 inverse=true cascade為none

hibernate 中的Inverse Cascade

1、2沒有設定cascade=save-update,是以都沒有儲存關聯的實體

3 inverse=false cascade為save-update

hibernate 中的Inverse Cascade
hibernate 中的Inverse Cascade

4.inverse=true cascade為save-update

hibernate 中的Inverse Cascade
hibernate 中的Inverse Cascade

注意case4中,有inverse=true,則表示關系由order去維護,隻有我主動save order實體的時候,才會将表示兩個實體間關系的uid進行更新