2017-10-16 7 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「子供」を扱っています1つはそれをCommonPostと呼ぶ以外は何も追加しない親が既に提供しているもの、つまり{xPost、yPost、..、CommonPost}のように列挙型を持つ識別子を追加したいのです。まず、それは可能か、それとも実用的なのでしょうか?

答えて

0

JPAベンダーがサポートされているかどうかは確認できますが、私はHibernateがこれをサポートしていると信じています。

がここにサンプルです:彼らが混在継承戦略、それを呼び出す

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

技術的には、JOINED戦略ですが、何も(一般SINGLE-TABLE戦略のために使用されている)識別カラムを追加できないようにしません。

もう1つの提案:エンティティ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 { 
関連する問題