2012-08-15 82 views
0

我是新來的休眠;使用舊版本使用.hbm.xml文件(無註釋)的繼承代碼庫休眠xml一對多連接三個表

我有一個表(比如表A),它與幾個表(表B和C)具有一對多的休眠關係, 「懶惰」屬性設置爲false;當我在做hiberateTemplate.load(Table a)時,它從所有三個表中獲取數據。我的情況是我需要對一個子表(表B)進行聯接,並在表B中查找特定的字段值,並僅從表B中的匹配字段值(表B)中獲取來自所有A,B,C的記錄特定領域)。

表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)

有什麼建議嗎?

+0

你將如何編寫一個基本的sql查詢來連接三個表?您可以編寫一個類似於此的HQL查詢。看看[HQL文檔](http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql)尋求幫助。 – gresdiplitude 2012-08-16 07:43:10

回答

1

DetchedCriteria幫助!

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