Hibernate → @DiscriminatorColumn說明
@DiscriminatorColumn
註解用於在 JPA 繼承結構中,為單表策略 (InheritanceType.SINGLE_TABLE
) 的繼承層次結構指定區分列。這樣,JPA 可以使用這個列來識別每一行對應的具體實體類型。
讓我們詳細解釋一下:
註解部分
1 |
@DiscriminatorColumn
:這個註解指定了用來區分不同實體類型的列。name="accountType"
:這指定了區分列的名稱為accountType
。這個列將會被添加到生成的單表中,用來存儲每一行對應的實體類型。discriminatorType = DiscriminatorType.STRING
:這指定了區分列的類型為STRING
。區分列可以是STRING
、CHAR
或INTEGER
。
作用
當使用 InheritanceType.SINGLE_TABLE
繼承策略時,所有的繼承層次結構中的實體類型都會被映射到同一張表中。區分列 (discriminator column
) 用來區分表中的每一行對應哪個具體的實體類型。例如,如果有一個 AdminGroup
基本類和兩個子類 AdminUser
和 AdminManager
,這張表中的每一行會有一個 accountType
列來指示該行是 AdminUser
還是 AdminManager
。
例子
假設我們有以下實體類:
1 |
|
對應的資料庫表可能如下:
id | name | accountType | userSpecificField | managerSpecificField |
---|---|---|---|---|
1 | AdminUser1 | USER | someUserValue | NULL |
2 | AdminManager1 | MANAGER | NULL | someManagerValue |
在這個表中,accountType
列用來區分每一行是 AdminUser
還是 AdminManager
。
總結
@DiscriminatorColumn
註解告訴 JPA 在單表策略的繼承結構中,使用 accountType
列來區分不同的實體類型,並且這個列的類型是 STRING
。這樣,JPA 就可以正確地將表中的每一行映射到相應的實體類。
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Cheng's Tech & Life!