2014-02-19 154 views
1

我試圖用JPA構建我的模型,但我面臨一個問題,我無法找到一個簡單的解決方案。好吧,讓我們說,我存儲在我的數據庫電影,電視連續劇和電視劇。我有一個表存儲三種類型。現在我有這三種類型的鑑別器列。在java中,我有一個抽象類,Movie,TVSerie和TVEpisode擴展了這個類。JPA中的多級繼承

我希望能夠一次檢索電視元素(TVSerie和TVEpisode),例如通過搜索請求。 我想過上TVElement類使用第二鑑別列如下:

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="type") 
public abstract class Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("tv") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="subtype") 
public class TVElement extends Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("episode") 
public class TVEpisode extends TVElement{ 
    ... 
} 

這種解決方案似乎但是並沒有工作。

在jpa中有2級繼承的最好方法是什麼?

感謝

回答

0

你顯然不需要在子類中的第二@DiscriminatorColumn

TVElement不是抽象的,所以這樣的事情在HQL應該是罰款

from TVElement tvElement where ... 

,應該讀出分型爲好。你的課應該類似於這樣的:

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="type") 
@Polymorphism(type = PolymorphismType.IMPLICIT) 
@MappedSuperClass 
public abstract class Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("tv") 
public class TVElement extends Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("episode") 
public class TVEpisode extends TVElement{ 
    ... 
} 
+0

嗯,我不知道如何檢索子類型如果我沒有鑑別器列。 「來自TVElement tvElement ...」的請求僅給我TVElement。如果刪除父類的@DiscriminatorColumn(name =「subtype」),@DiscriminatorValue(「episode」)行也是毫無意義的。 – streem

+0

你的JPA提供商是什麼? – WeMakeSoftware

+0

HibernatePersistence – streem