0

カスタムコレクションタイプを含む休止状態のマッピングがあります。

ジャバ:

class Policy {
...
private HistoryMap<Date, PolicyStatus> statusHistory;
...
}

hbm.xml:

    <map name="statusHistory" inverse="true" table="tbl_policy_in_time" order-by="PolIt_ValidFrom desc"
                    collection-type="be.pensionarchitects.admindb.infrastructure.hibernate.HistoryMapType">
                ...
    </map>

HistoryMapTypeinterfaceHistoryMapと implementsの実装UserCollectionTypeです。

このマップにはgetCurrent()、現在の を返すメソッドがありますPolicyStatus

ここで、特定の PolicyStatus を持つすべての Policy オブジェクトを現在のものとして取得するクエリを実行する必要があります。

何かのようなもの:

Criteria crit = getSession().createCriteria(Policy.class)
                .createAlias("statusHistory.current", "status")
                .add(Restrictions.or(
                        Restrictions.eq("status.code", "active"),
                        Restrictions.eq("status.code", "sleeper")));

「現在」は関連付けマッピングではないため、これが機能しないことを理解しています。これをどのように解決すればよいですか?代わりに HQL を使用する必要があることを読みましたが、それがどのように、また可能なのかさえわかりません。

どんなポインタでも大歓迎です!

ありがとう

4

1 に答える 1

1

HistoryMap が java.util.Map を実装している (そしてインターフェースのコントラクトを尊重している) 場合は、Criteria API を使用できます。そうでない場合、HQL (および Criteria API) では機能しないと思います。その場合、ネイティブ SQL を使用するのが最善の策です。結果が特定の Hibernate Bean にマーシャリングされるネイティブクエリを作成できます。

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13696

于 2011-10-04T13:36:32.700 に答える