1

私は次のグラフを持っています:

OrderLine
    OrderLineExtension
        OrderLineExtensionA
        OrderLineExtensionB
        OrderLineExtensionC

OrderLineには、一連のOrderLineExtensionが含まれています。
OrderLineExtensionは次のように定義されます:@Inheritance(strategy = InheritanceType.JOINED)エンティティとしてマークされ、抽象的です

階層内のこれらのクラスごとに、データベースにテーブルが作成されます。

OrderLineのアイテム名が"item"であるが、OrderLineExtensionAのorderReferenceNumber"orderRef"であるクエリを実行しようとしています。

OrderLineExtensionからOrderLineExtensionAへのJava参照がないため、OrderLineからOrderLineExtensionAにトラバースする方法がわかりません。

私はこれまでにこれを持っていますが、もちろん機能しません。

filter=DetachedCriteria.forClass(OrderLine.class);
    .add(Restrictions.eq("item", "item"));
    .createCriteria("orderLineExtension")
        .add(Restrictions.eq("orderReferenceNumber", "orderRef"));

これは、hibernateがクラスorderLineExtensionでorderReferenceNumberを見つけることができないと文句を言うため失敗します。これは、orderLineExtensionAにあるのでtrueです。しかし、どうすれば拡張機能に移動できますか?スーパークラスにサブクラスへの参照がないため、別のcreateCriteriaをネストできません。

どんな助けでもいただければ幸いです。

4

1 に答える 1

0

おっと、心配しないでください。この問題は、同僚が結合された各サブクラスで同じフィールドを作成したことに気付かなかったため、発生しました。Hibernate は最初のサブクラスに移動してプロパティをロードします。これが、間違ったインスタンスを取得していた理由です。

名前を変更したので、すべて正常に動作します。しばらく頭をかいていたが。

于 2010-02-01T13:45:59.750 に答える