2017-10-16 82 views
0

爲了我的數據庫管理員的利益,我必須使用連接繼承策略,這將更容易使用Single.Table,但呃,所以讓我們說一個實體:是否有可能在使用連接繼承策略時強制使用判別器

@Entity 
    @Inheritance(strategy = InheritanceType.JOINED) 
    public abstract class Post{ 
      @Id 
      @GeneratedValue(strategy = GenerationType.IDENTITY) 
      protected Long id; 
      protected String title; 
      protected String d_type;// I want this to to be the discriminator. 
} 

而且孩子:

@Entity 
    public abstract class Book{ 
      protected String title; 
} 

的例子是簡單的一個很好的答案的緣故,但在現實中我處理5「孩子」每個那些有其特定的屬性和方法除了一個我們稱之爲CommonPost,它不會增加任何內容父母已經提供了什麼,爲什麼我想添加一個枚舉類型的鑑別符如下{xPost,yPost,..,CommonPost}。首先是可能的,甚至是實際的?如果不是更好的選擇是可行的。

回答

0

這是可能的,但如果支持,您可以與您的JPA供應商聯繫。我相信Hibernate支持這一點。他們稱之爲混合遺傳策略:

這裏有一個例子:

@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name="POST_TYPE") 
public abstract class Post{ 

從技術上講,這是一個JOINED策略,但沒有什麼能阻止你增加一個鑑別列(其通常用於單表的策略)。

還有另外一個建議:如果你說實體CommonPost沒有任何特定的屬性或方法,那麼爲什麼不讓它成爲繼承層次結構中最頂級的類呢?那麼你現在可以消除抽象類Post

這裏是你可以怎麼做:

@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name="POST_TYPE") 
@DiscriminatorValue("C") 
public class CommonPost { 
... 
@DiscriminatorValue("X") 
public class XPost extends CommonPost { 
... 
@DiscriminatorValue("Y") 
public class YPost extends CommonPost { 
相關問題