0

私は冬眠するのが初めてです。.hbm.xml ファイルを使用する古いバージョンを使用する継承されたコードベース (注釈なし)

いくつかのテーブル (テーブル B および C) に対して 1 対多の休止状態の関係を持つテーブル (テーブル A など) があり、「lazy」属性は false に設定されています。hiberateTemplate.load(Table a) を実行しているときに、3 つのテーブルすべてからデータを取得します。私の状況では、子テーブルの 1 つ (テーブル B) に対して結合を実行し、テーブル B で特定のフィールド値を探し、すべての A、B、C からテーブル B の一致するフィールド値に対してのみレコードを取得する必要があります (テーブル B特定のフィールド)。

表A(イベント)

    <set name="eventKeyIdentifiers" table="EventKeyIdentifier"
            inverse="true" lazy="false" fetch="select">
        <key>
            <column name="eventId" not-null="true" />
        </key>
        <one-to-many class="event.EventKeyIdentifiers" />
    </set>    

    <set name="eventStatuses" table="EventStatus"
            inverse="true" lazy="false" fetch="select" order-by="effectiveDate DESC">
        <key>
            <column name="eventId" not-null="true" />
        </key>
        <one-to-many class="event.EventStatuses" />
    </set>            

表B(イベントステータス)

    <many-to-one name="event" class="event.Event" update="false" insert="false" fetch="select">
        <column name="eventId" length="36" not-null="true" />
    </many-to-one>

    <property name="statusCode" type="string">
        <column name="statusCode" length="100" not-null="true" />
    </property>

テーブル A (イベント) は、特定の「statusCode」(テーブル B) 用にロードする必要があります

助言がありますか?

4

1 に答える 1

1

DetchedCriteria が役に立ちました!

        DetachedCriteria criteria = DetachedCriteria.forClass(Event.class)
                                    .addOrder(Order.desc("eventProcessedDate"))
                                    .createAlias("eventStatuses", "evtStats")
                                    .add(Restrictions.naturalId()
                                        .set("evtStats.statusCode", status));
于 2012-08-16T15:38:44.130 に答える