2012-01-11 23 views
0

私はいくつかのクラスが深い階層JPAマッピングを持っています。このようなものJPA深継承アノテーション属性

@Entity 
@Inheritance(strategy= InheritanceType.SINGLE_TABLE) 
public abstract class BaseEntityClass implements Serializable { 

    // lots of stuff common to all my entities. 

} 

@Entity 
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS) 
public abstract class EntityTypeOne extends BaseEntityClass { 
    // stuff common to EntityTypeOne 
} 

@Entity 
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS) 
public abstract class EntityTypeTwo extends BaseEntityClass { 
    // stuff common to EntityTypeTwo 
} 

マッピング戦略を定義するためにスーパークラスで@Inheritenceメソッドを使用することがわかっています。しかし、これは深い階層構造とどのように機能しますか?私はすべてのリーフクラスを自分のテーブルにマッピングする必要があります。私はBaseEntityClassでSINGLE_TABLEを行うべきですか?

答えて

2

基本クラスにはTABLE_PER_CLASSと表示されます。ここではOpenJPAからの例です:

@Entity 
@Table(name="MAG") 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public class Magazine { 
    ... 
} 

@Entity 
@Table(name="TABLOID") 
public class Tabloid 
    extends Magazine { 
    ... 
} 

JPA JavaDocsによると、@Inheritance注釈は、クラス階層のルートに指定する必要があります。

は、エンティティクラスに使用される継承戦略を定義します 階層。これは、エンティティクラス階層で エンティティクラス階層のルートであるエンティティクラスで指定されます。

この注釈がサブクラスに配置できるかどうかは仕様で指定されていないため、その動作は定義されていません。

SubSub -> Sub -> Base 

あなただけ@Inheritance(strategy = TABLE_PER_CLASS)Baseに注釈を付ける必要があります。ですから、この階層を持っている場合は、コメントで尋ねてきた質問に答える

+0

階層内のすべてのスーパークラスが同じ@Inheritenceアノテーションを持っている必要がありますか?異なる注釈を使用することは何を意味するのでしょうか? – b3bop

+0

更新された回答をご覧ください。 – Behrang

+0

素晴らしい。ありがとう – b3bop

関連する問題