2010-11-25 4 views
18

継承型のディスクリミネータ列を使用するために休止状態に強制することはできますか? JPA2.0仕様によれば、これは可能ですが、私は休止状態では達成できません。InheritanceType.JOINEDのディスクリミネータ

例:

@Inheritance(strategy = InheritanceType.JOINED) 
@ForceDiscriminator 
@DiscriminatorColumn(name="TYPE") 
@Entity 
public class Parent 

@Entity 
@DiscriminatorValue("C") 
public class Child extends Parent 

作成hibernate.hbm2ddl.auto使用する場合でも、テーブルPARENT内の列TYPEを作成しません。

私は、ディスクリミネータ列を定義せずに動作することを知っていますが、ディスクリミネータ列に情報を使用するときは、Hibernateは親と子の間で結合を作成する必要があるため、

+1

Hibernateアノテーションでサポートされていないようです。http://opensource.atlassian.com/projects/hibernate/browse/ANN-140 – milbr

答えて

1

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)を使用しますか?

+0

いいえ、私はデータベースに正規化されたスキーマを持ちたいと思います。 InheritanceType.SINGLE_TABLEを使用していくつかの子を追加すると、親テーブルの構造を変更する必要があります(いくつかの列を追加します)。 – milbr

+1

継承継承のディスクリミネータ列は、私が覚えているものではサポートされていません。私にあなたのための休止状態のドキュメントをgoogleさせてください。 –

+0

あなたが行く:http://opensource.atlassian.com/projects/hibernate/browse/ANN-140 –

12

私は、DiscriminatorとSecondaryTableを使って、これを行うことができました。 I.

@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="TYPE") 
@Entity 
public class Parent 

@Entity 
@DiscriminatorValue("C") 
@SecondaryTable(name = "child", pkJoinColumns = {@PrimaryKeyJoinColumn(name="id", referencedColumnName = "id")}) 
public class Child extends Parent 

新しいサブクラスを追加すると、関連する拡張データフィールドを含む新しいテーブルが追加されます。

+4

これは私には無関係ではないようです。 – jhericks

関連する問題