這兩個屬性都用於一多對或者多對多的關係中。而inverse特別是用於雙向關係,在單向關係中我們並不需要。 Cascade代表是否執行級聯操作,Inverse代表是否由己方維護關係。 Cascade: Cascade屬性的可能值有 all: 所有情況下均進行關聯操作,即save-update和delete。 none: 所有情況下均不進行關聯操作。這是預設值。 save-update: 在執行save/update/saveOrUpdate時進行關聯操作。 delete: 在執行delete 時進行關聯操作。 all-delete-orphan: 當一個節點在物件圖中成為孤兒節點時,刪除該節點。比如在一個一對多的關係中,Student包含多個book,當在物件關係中刪除一個book時,此book即成為孤兒節點。 Inverse: Inverse屬性的可能值是true或者false,預設為false: false代表由己方來維護關係,true代表由對方來維護關係。在一個關係中,只能由一方來維護關係,否則會出問題(解疑中會講到);同時也必須由一方來維護關係,否則會出現雙方互相推卸責任,誰也不管。
1、cascade(級聯) 引用了《深入淺出 Hibernate》:級聯(cascade)在Hibernate對映關係中,它指的是當主控方執行操作時,關聯物件(被動方)是否同步執行同一操作,如主控方物件呼叫save-update或delete 方法時,是否同事對關聯物件(被動方)進行save-update或delete。 這裡所說的主控方按我理解指的是:比如,User 類中有一Address屬性,User和Address 是一對多的關係,然後當user.save(address);的時候,user就是主控方了。
2、inverse(控制方向反轉) 引用了《深入淺出 Hibernate》:在Hibernate 語義中,inverse指定了關聯關係中的方向。關聯關係中,inverse=false 的為主動方,由主動方負責維護關聯關係。 這裡所說的關聯關係按我理解指的是:為了維持兩個實體類(表)的關係,而新增的一些屬性,該屬性可能在兩個實體類(表)或者在一個獨立的表裡面,這個要看這雙方直接的對應關係了: ps:這裡的維護指的是當主控放進行增刪改查操作時,會同時對關聯關係進行對應的更新。 一對多:該屬性在多的一方。應該在一方的設定 inverse=true ,多的一方設定 inverse=false(多的一方也可以不設定inverse屬性,因為預設值是false),這說明關聯關係由多的一方來維護。原因:該關聯關係的屬性在多的一方的表中,在維護關聯關係的時候在多的一方容易維護。 多對多:屬性在獨立表中。在任意一方設定inverse=true,另一方inverse=false;原因:如果兩個多設定為true 的話,表示兩方都對關聯關係表(獨立表)進行了同樣的維護,其實只要一方維護就行了,效率上來說,這樣設定是合理點的。 一對一:其實是一對多的一個特例,inverse 的設定也是一樣的,主要還是看關聯關係的屬性在哪一方,這一方的inverse=false。 多對一:也就是一對多的反過來,沒什麼區別。
這兩個屬性都用於一多對或者多對多的關係中。而inverse特別是用於雙向關係,在單向關係中我們並不需要。 Cascade代表是否執行級聯操作,Inverse代表是否由己方維護關係。 Cascade: Cascade屬性的可能值有 all: 所有情況下均進行關聯操作,即save-update和delete。 none: 所有情況下均不進行關聯操作。這是預設值。 save-update: 在執行save/update/saveOrUpdate時進行關聯操作。 delete: 在執行delete 時進行關聯操作。 all-delete-orphan: 當一個節點在物件圖中成為孤兒節點時,刪除該節點。比如在一個一對多的關係中,Student包含多個book,當在物件關係中刪除一個book時,此book即成為孤兒節點。 Inverse: Inverse屬性的可能值是true或者false,預設為false: false代表由己方來維護關係,true代表由對方來維護關係。在一個關係中,只能由一方來維護關係,否則會出問題(解疑中會講到);同時也必須由一方來維護關係,否則會出現雙方互相推卸責任,誰也不管。
1、cascade(級聯) 引用了《深入淺出 Hibernate》:級聯(cascade)在Hibernate對映關係中,它指的是當主控方執行操作時,關聯物件(被動方)是否同步執行同一操作,如主控方物件呼叫save-update或delete 方法時,是否同事對關聯物件(被動方)進行save-update或delete。 這裡所說的主控方按我理解指的是:比如,User 類中有一Address屬性,User和Address 是一對多的關係,然後當user.save(address);的時候,user就是主控方了。
2、inverse(控制方向反轉) 引用了《深入淺出 Hibernate》:在Hibernate 語義中,inverse指定了關聯關係中的方向。關聯關係中,inverse=false 的為主動方,由主動方負責維護關聯關係。 這裡所說的關聯關係按我理解指的是:為了維持兩個實體類(表)的關係,而新增的一些屬性,該屬性可能在兩個實體類(表)或者在一個獨立的表裡面,這個要看這雙方直接的對應關係了: ps:這裡的維護指的是當主控放進行增刪改查操作時,會同時對關聯關係進行對應的更新。 一對多:該屬性在多的一方。應該在一方的設定 inverse=true ,多的一方設定 inverse=false(多的一方也可以不設定inverse屬性,因為預設值是false),這說明關聯關係由多的一方來維護。原因:該關聯關係的屬性在多的一方的表中,在維護關聯關係的時候在多的一方容易維護。 多對多:屬性在獨立表中。在任意一方設定inverse=true,另一方inverse=false;原因:如果兩個多設定為true 的話,表示兩方都對關聯關係表(獨立表)進行了同樣的維護,其實只要一方維護就行了,效率上來說,這樣設定是合理點的。 一對一:其實是一對多的一個特例,inverse 的設定也是一樣的,主要還是看關聯關係的屬性在哪一方,這一方的inverse=false。 多對一:也就是一對多的反過來,沒什麼區別。