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!






