私はすでに成長しているプロジェクトで作業しているので、使用されているフレームワークやライブラリのバージョンを変更することはできません。
実際、私は2つのエンティティと、、およびで解決できた特定の状況が@Inheritance
あり@DiscriminatorColumn
まし@DiscriminatorValue
た。これで、次のように、継承内の両方のクラスへの参照を持つエンティティができました。
@Entity
//Other annotations
public class A implements IA {
//Class body
}
@Entity
//Other annotations
public class B extends A implements IB { //Note: `IB` extends `IA`.
//Class body
}
@Entity
//Other annotations
public class Container {
private IA object1;
private IA object2;
}
ここでの問題は、@ Anyアノテーションを使用しようとしていることです。これは、object1
および/またはのいずれかがまたobject2
はのタイプである可能性があるためです。私がやったことはこれです:A
B
@Any(metaColumn=@Column(name="objectOneType", length=3),fetch=FetchType.EAGER)
@AnyMetaDef(idType="long",metaType="string", metaValues={
@MetaValue(targetEntity=A.class, value="A"),
@MetaValue(targetEntity=B.class, value="B")
}
)
@JoinColumn(name = "relatedObjectId")
private IA object1;
ここで述べたように、Hibernateの@Any
アノテーションファミリーにはJPA 2に対応するものがなく、Hibernate 4.1に切り替えることができないため、Hibernateを機能させる方法や、修正するために何をすべきかを考えようとしています。
「それほどエレガントではない」方法は、新しいエンティティを作成し、フィールドをAからBにコピーして、継承を消去し、特定のケースを修正することです。
たぶん、私はまだ知らないJPAの特定の機能を失っているので、私は現在、正しい方向を示す可能性のあるあらゆる種類の提案を受け入れ、感謝しています。