2016-08-22 81 views
0

我是hibernate的新手,遇到了關聯映射和繼承問題。根據我的理解,他們似乎完全一樣。Hibernate:關聯映射vs繼承

他們有什麼區別?

+2

蘋果是一種水果。這是繼承。一個籃子包含水​​果,一個水果包含在一個籃子裏。這是一個關聯。它與Hibernate沒有多大關係。更多與OO。 –

+0

@David G:感謝好友清除它 –

回答

0

Hibernate中關聯映射和繼承之間的區別與任何OO編程語言中的差別幾乎相同。

Association Mapping indicates HAS-A Relationship. 
Inheritance indicates acquiring the properties of Parent Class to Child Class. 

就像你剛纔說的一樣,是的,你是對的。直接或間接地將其他類的屬性或行爲繼承到類。在Hibernate中或者在任何ORM中,它將只是屬性,因爲它只處理數據。

我們有像OneToOne,OneToMany和ManyToMany的關聯映射。 在所有關聯映射中,我們只使用兩個表,除了ManyToMany中我們使用Bridge表的地方。

POJO類OneToOne批註或ManyToOne批註將使用外鍵引用另一個表中的行。

所以在OneToOne映射中,任何表都可以被引用到另一個表中。 (我們必須在此指定表格應該使用mappedBy屬性引用其他表格)

在OneToMany中,我們沒有任何混淆。 在ManyToMany中,我們與Bridge Table有兩個OneToMany關聯。因此適用於每個個人關係的OneToMany。

繼承可以通過表達每個具體類,每個子類表和每個層次表。

在繼承映射中,當一個表用於多個類時,Hibernate使用區別列來區分數據以指示哪些行實際屬於哪個實體。

在每個具體方法的表中,該表繼承了Abstract類的列(屬性或POJO類中的變量)。

在Table per Hierarchy方法中,它每個整個層次結構方法只維護一個表。

在Table per子類方法中,它爲每個子類維護表。例如,如果有來自單個實體的兩個分支(子類)。然後,將會有兩個表格。