ORMにhibernateとannotationsを使用しています。 すべてのBeanのインタフェースがあり、リレーションシップにtargetEntityを使用しています。 getterがBeanではなくインタフェースを返すため、hibernateは型を派生できません。@ManyToOneをオーバーライドする@Embedded for interfaces with
埋め込みBeanのMappingException(型を判別できませんでした)が表示されます。
@Entity(name="FieldBean")
public class FieldBean implements Field {
...
}
@Embeddable
public class FacetBean implements Facet {
...
@ManyToOne(targetEntity = FieldBean.class)
@JoinColumn(name = "field_id")
public Field getField() {
return field;
}
}
@Entity(name = "Chart")
public class ChartBean implements Chart {
@Embedded
@AssociationOverride(
name = "field",
joinColumns = @JoinColumn(name = "category_facet_field_id")
)
public Facet getCategoryFacet() {
return categoryFacet;
}
}
IはMappingExceptionを得る:表で、フィールド:の型を判別できませんでした列のチャート:[org.hibernate.mapping.Column(フィールド)]
豆を使用する代わりにするためのインターフェイスプロパティとgetter/setterの宣言はこの問題を解決しますが、私はインターフェイスを使用することに固執したいと思います。プロパティ宣言だけでBeanを使用しても問題は解決しません。
誰かが正しい方向に向いていますか?
私はインターフェイスを使用していますおよび相続。これがORMのレベルでいくらか複雑さをもたらしたと認めている。一方、それは私が探している抽象化のレベルを私に提供する。 – user1966634
**インタフェース**は、ORMテクノロジの抽象化を提供するために使用されます。 MDAアプローチを使用して、インタフェース、Bean、サービスクラスなどのオブジェクトモデルから永続化レイヤーコードを生成します。代替のORM技術は、インターフェイスを安定に保ちながら代替のBeanとサービスクラスを生成することで、透過的に使用できます。 – user1966634
**継承**は、データモデリングの観点から、データの一般的なビューと特定のビューの両方をサポートする必要があります(特に、排他的ではありません)。いくつかの欠点にもかかわらず、この機能は依然として有用であり、アプリケーションスタック内のより高いレベルでコードを単純化します。 – user1966634