2014-02-13 128 views
0

類層次結構:JPA - 繼承

| Vehicle 
+ - Motorized 
+ - - Truck 

數據庫表 - 把汽車領域的電動平臺,但保持機動和卡車成爲獨立的表:

電動 - 有車輛領域
卡車 - FK到電動

JPA有沒有簡單的方法來做到這一點?

例如以便可以使用以下內容:

EntityManager em = factory.createEntityManager(); 
Query q = em.createQuery("select t from Todo t"); 
List<Vehicle> vehicles = q.getResultList(); 

使用find方法可以實現多態嗎?

Vehicle vehicle = em.find(Vehicle.class, 123); 
+1

您的意思是將Motorized字段放入車輛表中?機動化是車輛的更專業化的版本...嗯,也許一些更多的信息?這是一個偉大的網站順便說一句:http://en.wikibooks.org/wiki/Java_Persistence –

+0

Typo:Query q = em.createQuery(「select v from Vehicle」); – Meta

+0

查看繼承:http://en.wikibooks.org/wiki/Java_Persistence/Inheritance此外,使用Criteria方法查詢是類型安全的,而JPQL不是,afik。 – Saad

回答

2

我認爲您正在尋找JPA joined inheritance。我不確定你是否會用find方法獲得多態性,但我會這麼認爲,因爲Hibernate通過ID維護所有對象的第一級緩存;如果您通過其ID請求該對象,則必須返回相應子類的實例。

+0

本身加入了繼承似乎沒有處理層次結構的根類不在單獨的表中的情況。它看起來像映射超類是一種方式(沿w /連接繼承)。我會更進一步。 – Meta