1. 程式人生 > >hibernate關聯總結

hibernate關聯總結

 在一對多與多對一的關聯關係中,儲存資料最好的通過多的一方來維護關係,這樣可以減少update語句的生成,從而提高hibernate的執行效率!


配置一對多與多對一,這種叫“雙向關聯”

只配置一對多,           叫“單項一對多”

只配置多對一,           叫“單項多對一”


注意:

         配置了哪一方,哪一方才有維護關聯關係的許可權!


Inverse屬性

Inverse屬性,是在維護關聯關係的時候起作用的。

       表示控制權是否轉移。(在一的一方起作用)

 

Inverse , 控制反轉。

Inverse = false  不反轉;   當前方有控制權

                   True  控制反轉; 當前方沒有控制權

 

維護關聯關係中,是否設定inverse屬性:

         1. 儲存資料

                   有影響。

            如果設定控制反轉,即inverse=true, 然後通過部門方維護關聯關係。在儲存部門的時候,同時儲存員工, 資料會儲存,但關聯關係不會維護。即外來鍵欄位為NULL

2. 獲取資料

                   無。

 3. 解除關聯關係?

                   有影響。

                  inverse=false,  可以解除關聯

inverse=true,  當前方(部門)沒有控制權,不能解除關聯關係

(不會生成update語句,也不會報錯)

 4. 刪除資料對關聯關係的影響?

                   有影響。

                   inverse=false, 有控制權, 可以刪除。先清空外來鍵引用,再刪除資料。

                   inverse=true,  沒有控制權: 如果刪除的記錄有被外來鍵引用,會報錯,違反主外來鍵引用約束!  如果刪除的記錄沒有被引用,可以直接刪除。


cascade 屬性

cascade  表示級聯操作  【可以設定到一的一方或多的一方】

         none          不級聯操作, 預設值

         save-update     級聯儲存或更新

         delete                  級聯刪除

         save-update,delete    級聯儲存、更新、刪除

         all                 同上。級聯儲存、更新、刪除

 


設定inverse屬性,在多對多種維護關聯關係的影響?

1) 儲存資料

有影響。

          inverse=false ,有控制權,可以維護關聯關係; 儲存資料的時候會把物件關係插入中間表;

         inverse=true,  沒有控制權, 不會往中間表插入資料。

2) 獲取資料

         無。

 

3) 解除關係

         // 有影響。

         // inverse=false ,有控制權, 解除關係就是刪除中間表的資料。

         // inverse=true, 沒有控制權,不能解除關係。

4) 刪除資料

         有影響。

         // inverse=false, 有控制權。 先刪除中間表資料,再刪除自身。

         // inverse=true, 沒有控制權。 如果刪除的資料有被引用,會報錯! 否則,才可以刪除