inverse 原意:反轉。這裡了解為讓對方做事。也就是inverse=true關系讓對方維護,為false為雙方維護。多對多中維護的意思就是增加或者更新實體記錄時,是否增加或者更新關系表的記錄(當然,此時要求對象中要有set集合,這樣才有意義)。一對多中,是否是表示在多的一方表中增加記錄,
在多對多關系中,cascade表示是否在子表中建立或更新記錄(也就是cascade涉及實體記錄),而inverse表示是否在關系表(intermediary table,不涉及實體記錄)中建立或者更新記錄。
實驗一,多表中Inverse 和Cascade :
多表關系 Graduate t_gt Tutor
學生bean維護了老師bean的set集合,
執行個體化一個學生對象,然後再在其中添加兩個老師對象。
開始實驗:注意我的inverse和cascade都在Graduate.hbm.xml配置
1、inverse =false cascade為none(沒有配置)
可以看出,inverse為false時,graduate和turor都為父表,都可以維護關系,是以save graduate1的時候,會向關系表t_gt中插入表示graduate和turor關系的資料。但是,由于沒有設定cascade=save-update,導緻當hibernate想要向turor表插入set集合中的資料的時候被拒絕了。
2、inverse =true cascade為none(沒有配置)
隻有一條sql語句
inverse =true,關系由turor去維護,導緻save graduate1的時候,不用去維護關系表。是以隻産生了一條語句。
3、inverse =false cascade=save-update
4、inverse =true cascade=save-update
inverse =true 關系由turor去維護,cascade=save-update表示允許将graduate1中set集合中的資料插入turor表
實驗二 one to many
測試save user
實驗開始:注意我的inverse和cascade都在User.hbm.xml配置
1. inverse=false cascade為none
2 inverse=true cascade為none
1、2沒有設定cascade=save-update,是以都沒有儲存關聯的實體
3 inverse=false cascade為save-update
4.inverse=true cascade為save-update
注意case4中,有inverse=true,則表示關系由order去維護,隻有我主動save order實體的時候,才會将表示兩個實體間關系的uid進行更新