[英]Mapping Sub-Classes by Type Table (Many-To-One Hibernate)
我必須制作一個拼貼項目的域層。 我們幾乎沒有標准,例如我們必須使用Hibernate,數據庫也已修復。
數據庫的相關部分幾乎如下所示:
總線實體 (表1)
總線類型 (表2)
我遇到的問題是,在域層中有2種類型的總線通過BusType表中的標識符進行區分:
@Entity
class Bus
{
@Id
int _id;
...
}
@Entity
class BusSubClass1 extends Bus
{
...
}
@Entity
class BusSubClass2 extends Bus
{
...
}
有沒有辦法用Hibernate和JPA映射類似的東西? 謝謝你的回答。
喬欽·莫倫特
是的,幾乎沒有辦法映射這種情況。 JPA支持三種不同的數據表示形式:
換句話說,根據所使用的繼承類型,您將獲得不同的數據庫模型。 各種JPA提供程序可能支持其他繼承策略。
考慮以下示例:
@Entity
@Inheritance //by default SINGLE_TABLE strategy
@DiscriminatorColumn( //not supported for TABLE_PER_CLASS strategy
name = "BUS_TYPE",
discriminatorType = DiscriminatorType.INTEGER
)
public abstract class Bus {
@Id
protected int id;
protected int seats;
public Bus() {
}
}
@Entity
@DiscriminatorValue(value = "1") //not supported for TABLE_PER_CLASS strategy
public class BusSubClass1 extends Bus {
private String specific1;
public BusSubClass1() {
}
}
@Entity
@DiscriminatorValue(value = "2") //not supported for TABLE_PER_CLASS strategy
public class BusSubClass2 extends Bus {
@Temporal
private Data specific2;
public BusSubClass2() {
}
}
使用InheritanceType.SINGLE_TABLE
策略將導致一個包含所有具體實體類型的數據庫表:
Bus
ID BUS_TYPE SEATS SPECIFIC1 SPECIFIC2
-- -------- ----- --------- ---------
1 1 50 qwerty
2 1 55 asdfgh
3 2 30 2014-01-01
使用InheritanceType.JOINED
策略會導致每個實體類型具有多個數據庫表(來自Bus
所有共享字段都存儲在相應的表中):
Bus BusSubClass1 BusSubClass2
ID BUS_TYPE SEATS ID SPECIFIC1 ID SPECIFIC2
-- -------- ----- -- --------- -- ---------
1 1 50 1 qwerty 3 2014-01-01
2 1 55 2 asdfgh
3 2 30
使用InheritanceType.TABLE_PER_CLASS
策略可以為每種實體類型精確地提供一個數據庫表(在特定的子類中重新定義了Bus
所有共享字段):
BusSubClass1 BusSubClass2
ID SEATS SPECIFIC1 ID SEATS SPECIFIC2
-- ----- --------- -- ----- ---------
1 50 qwerty 3 30 2014-01-01
2 55 asdfgh
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.