hibernate xml一对多JOIN三个表

时间:2012-08-15 16:17:03

标签: xml hibernate one-to-many

我是新来的冬眠;继承的代码库,它使用使用.hbm.xml文件的旧版本(无注释)

我有一个表(比如表A),它与一对表(表B和C)有一对多的休眠关系,“lazy”属性设置为false;当我在做hiberateTemplate.load时,它会从三个表中获取数据(表a)。我的情况是我需要连接其中一个子表(表B)并在表B中查找特定的字段值,并从表B中的匹配字段值获取所有A,B,C的记录(表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)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

DetchedCriteria帮忙!

        DetachedCriteria criteria = DetachedCriteria.forClass(Event.class)
                                    .addOrder(Order.desc("eventProcessedDate"))
                                    .createAlias("eventStatuses", "evtStats")
                                    .add(Restrictions.naturalId()
                                        .set("evtStats.statusCode", status));