2012-04-30 90 views
0

我的應用有聯盟,每個聯盟可以有任意數量的比賽。我使用.hbm.xml文件來建立聯盟和比賽之間的聯繫。我配置如下它:休眠:多對多關聯爲空

<set name="competitions" table="leagueCompetitions" lazy="false"> 
    <meta attribute="property-type"><![CDATA[Set<Competition>]]></meta> 
    <meta attribute="default-value"><![CDATA[new HashSet<Competition>()]]></meta> 
    <key column="leagueId"/> 
    <many-to-many column="competitionId" 
      unique="true" 
      lazy="false" 
      class="com.example.model.Competition"/> 
</set> 

我有獲取聯賽的名單,基本上可以歸結爲

Query query = session.createQuery("from League"); 
return query.list(); 

我寫了一些代碼來算比賽中DAO方法,它是儘可能簡單

if (league.getCompetitions().size() > 0) { ... blahditty blah ... } 

但它失敗了,因爲getCompetitions()總是一個空集。

問題:當我使用LeagueDAO.list()獲取聯賽列表時,是否不應該爲每個聯盟都加載所有比賽?

回答

1

原來,我的hbm.xml配置是無效的。我在一張桌子上有多對多的配置,而在協會的對面有多對多的配置。結果只是一團糟。

2

添加級聯= 「全」

<set name="competitions" table="leagueCompetitions" lazy="false" cascade="all"> 
<meta attribute="property-type"><![CDATA[Set<Competition>]]></meta> 
<meta attribute="default-value"><![CDATA[new HashSet<Competition>()]]></meta> 
<key column="leagueId"/> 
<many-to-many column="competitionId" 
     unique="true" 
     lazy="false" 
     class="com.example.model.Competition"/> 

+0

謝謝,但似乎沒有任何區別Hibernate的行爲。和[我早前閱讀](https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies)比「選擇」是默認的。 – Marvo

+0

也是你可以把它保存而不cacade =「所有」,我覺得你應該得到的例外,如「對象引用一個未保存的瞬態的實例 - 沖洗之前保存的瞬態的實例」 – mprabhat

+0

這也不工作。 – Marvo