2012-04-03 33 views
1

私のクラス構造は次のようになっています...ここには2つの別々の戦略が実装されていますが、ルートクラスの継承ストラテジー、つまりInheritanceType.JOINEDが階層全体...、私は「D」のインスタンスを作成し、それを持続しようとしていますjpaの継承ストラテジーを継承する - inheritanceType.JOINED with inheritanceType.SINGLE_TABLE

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "typeName", discriminatorType = DiscriminatorType.STRING, length = 100) 
@Table(name="table_A") 
public abstract class A{ 
... 
} 


@Entity 
@Table(name = "table_B") 
@PrimaryKeyJoinColumn(name = "ID_B") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorValue("SVC") 
public abstract class B extends A { 
... 
} 

@Entity 
@DiscriminatorValue("C") 
public class C extends B { 
... 
} 

@Entity 
@DiscriminatorValue("D") 
public class D extends B { 
... 
} 

を、Hibernateは
...「D」という名前のテーブルを探している私は、人々のカップルが尋ねました同じ質問...しかし答えは私を助けなかった...

mixing joined and single table inheritance and querying for all objects - 同じ問題は
How to mix inheritance strategies with JPA annotations and Hibernate? - 私の場合はsingle_tableを混在させてください。これは私の場合は役に立ちません。

+0

私は[解決策]を見つけました(http://stackoverflow.com/questions/40679517/how-to-mix-inheritance-type-in​​- jpa)JPA openJPAを使用しているときのみ、Hibernateなし。 –

答えて

2

JPA仕様では、継承ツリーで戦略を組み合わせることはできません。ルートエンティティで継承戦略を設定する必要があります。 JDOは、混合戦略を可能にする唯一の仕様です。それを許可するJPAの実装を見つけることができますが、それは移植可能ではありません。