可以說我有類似於下面的對象模型:映射JPA實體繼承層次
abstract class Vehicle {
String guid;
String name;
Double price;
}
class SUV extends Vehicle {
Integer towingCapacity;
}
class Hybrid extends Vehicle {
Integer batterySize;
}
我需要使用JPA和該層次結構映射到數據庫中。我選擇去與「連接表每類」的做法,因爲這裏概述:http://java.dzone.com/articles/jpa-implementation-patterns-mapping
所以基本上我有一個Vehicle
父表,與具有外鍵Vehicle
的SUV
和Hybrid
表。我選擇這個解決方案的原因是我喜歡規範化的模式,此外Vehicle.guid
需要全局唯一,所以擁有一個帶有該字段的父表(而不是分散在單個表中)簡化了這個UNIQUE約束。
我還是比較新的JPA,我不知道如何將它們設置爲JPA實體。 Vehicle
是否會成爲MappedSuperclass?另外,我知道我需要爲每個實體添加@Id,但SUV
和Hybrid
將使用Vehicle
表的外鍵,還是必須使用子表中的主鍵作爲標識符?
在此先感謝。
所以根據你的建議,我有'Vehicle','SUV'和'Hybrid'所有實體。 'Vehicle'有@Id和'SUV','Hybrid'沒有@Id,只有必要的@Column。當我試圖用該設置堅持SUV時,我收到一個錯誤消息,說明沒有找到Vehicle Vehicle,直接在下面試圖準備一個包含Vehicle和SUV表中每列的表格Vehicle的聲明。 PU似乎並沒有實現層次結構。有任何想法嗎? – user1491636
抱歉,我遺失了SUV實體上的@PrimaryKeyJoinColumn(name =「VehicleId」,referencedColumnName =「VehicleId」)'和'Vehicle'實體上的'@Inheritance(strategy = InheritanceType.JOINED)'。這已經解決了上面準備好的問題,但仍然沒有找到表。 – user1491636
奇怪的是,如果我在創建持久性單元中更改表生成策略,那麼一切正常。我無法找到表格的創建位置。必須是持久性單元的問題,我沒有看到。但至少堅持工作:)謝謝。 – user1491636