Hibernate 實體層設計

2021-05-25 18:21:19 字數 2356 閱讀 1773

hibernate繼承對映的第一種策略:每棵類繼承樹對應一張表(所有子類資訊都存在一張表裡,用乙個欄位來區分)

1、理解如何對映

因為類繼承樹肯定是對應多個類,要把多個類的資訊存放在一張表中,必須有某種機制來區分哪些記錄是屬於哪個類的。

這種機制就是,在表中新增乙個字段,用這個欄位的值來進行區分。用hibernate實現這種策略的時候,有如下步驟:

父類用普通的標籤定義

在父類中定義乙個discriminator,即指定這個區分的字段的名稱和型別

如:子類使用標籤定義,在定義subclass的時候,需要注意如下幾點:

subclass標籤的name屬性是子類的全路徑名

在subclass標籤中,用discriminator-value屬性來標明本子類的discriminator欄位(用來區分不同類的字段)的值

subclass標籤,既可以被class標籤所包含(這種包含關係正是表明了類之間的繼承關係),也可以與class標籤平行。

當subclass標籤的定義與class標籤平行的時候,需要在subclass標籤中,新增extends屬性,裡面的值是父類的全路徑名稱。

子類的其它屬性,像普通類一樣,定義在subclass標籤的內部。

2、理解如何儲存

在儲存資料的時候,hibernate會自動將鑑別欄位的值插入到資料庫中,在載入資料的時候,

hibernate便能根據這個鑑別字段正確的載入物件

3、理解何為多型查詢,即hibernate能夠載入資料的時候自動鑑別其真正的型別

多型get(),支援

多型load(),設定lazy=「false」時,支援

多型查詢,支援

hibernate繼承對映的第一種策略:每個類對應一張表(父類存放公共資訊、子類存放特有資訊)

1、如何對映

這種策略是使用joined-subclass標籤來定義子類的。父類、子類,每個類都對應一張資料庫表。

在父類對應的資料庫表中,實際上會儲存所有的記錄,包括父類和子類的記錄;在子類對應的資料庫表中,

這個表只定義了子類中所特有的屬性對映的字段。子類與父類,通過相同的主鍵值來關聯。實現這種策略的時候,有如下步驟:

父類用普通的標籤定義即可

父類不再需要定義discriminator欄位

子類用標籤定義,在定義joined-subclass的時候,需要注意如下幾點:

joined-subclass標籤的name屬性是子類的全路徑名

joined-subclass標籤需要包含乙個key標籤,這個標籤指定了子類和父類之間是通過哪個欄位來關聯的。

如:,這裡的column,實際上就是父類的主鍵對應的對映欄位名稱。

joined-subclass標籤,既可以被class標籤所包含(這種包含關係正是表明了類之間的繼承關係),

也可以與class標籤平行。 當joined-subclass標籤的定義與class標籤平行的時候,需要在joined-subclass標籤中,新增extends屬性,裡面的值是父類的全路徑名稱。

子類的其它屬性,像普通類一樣,定義在joined-subclass標籤的內部。

2、儲存和多型查詢參見策略一:每棵類繼承樹對應一張表

hibernate繼承對映的第一種策略:每個具體類一張表(每個子類對應一張資訊完備的表)

1、如何對映

這種策略是使用union-subclass標籤來定義子類的。每個子類對應一張表,而且這個表的資訊是完備的,

即包含了所有從父類繼承下來的屬性對映的字段(這就是它跟joined-subclass的不同之處,joined-subclass定義的子類的表,

只包含子類特有屬性對映的字段)。實現這種策略的時候,有如下步驟:

父類用普通標籤定義即可

子類用標籤定義,在定義union-subclass的時候,需要注意如下幾點:

union-subclass標籤不再需要包含key標籤(與joined-subclass不同)

union-subclass標籤,既可以被class標籤所包含(這種包含關係正是表明了類之間的繼承關係),

也可以與class標籤平行。 當union-subclass標籤的定義與class標籤平行的時候,需要在union-subclass標籤中,新增extends屬性,裡面的值是父類的全路徑名稱。

子類的其它屬性,像普通類一樣,定義在union-subclass標籤的內部。這個時候,雖然在union-subclass裡面定義的只有子類的屬性,但是因為它繼承了父類,所以,

不需要定義其它的屬性,在對映到資料庫表的時候,依然包含了父類的所有屬性的對映字段。

!!!特別注意:在儲存物件的時候,id不能重複(所以不能用自增方法生成主鍵)

2、儲存和多型查詢參見策略一:每棵類繼承樹對應一張表

hibernate實體對映

1.寫注釋 格式為 屬性,表示本類的?關係 例如 2.寫模板 多對一 一對多 多對多 注 多對多中的table 表示填入中間 的名稱 3.填空 name屬性 屬性名 注釋中的第1問號 class屬性 關聯的實體型別 注釋中的第2個問號 column屬性 多對一中的 一般可以寫成屬性名加id字尾,如屬...

Hibernate 實現繼承實體

在基類中使用如下註解 public class basea implements serializable 子類中使用如下 entity table name example public class childb extends basea 這裡hibernate會將兩個類進行聚合 去建立 新的表...

資料庫的設計及hibernate實體對映

以 商品案例資料庫為例 首先商品案例資料庫設計 管理員表 id 遞增序列 name 管理員 pass 密碼 客戶表id 遞增序列 name 登入名稱 pass 登入密碼 性別 enum email 註冊郵箱 rdate 註冊日期 beanutils state 是否被啟用的狀態 0 1 商品表id ...