2012-04-30 8 views
0

私のアプリはリーグを持ち、各リーグはいくつでも競技を行うことができます。私は、.hbm.xmlファイルを使用して、リーグと大会の関連を設定します。次のように私はそれを設定した:Hibernate:多対多関連は空です

<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の設定が無効だったことが判明します。私は1つのテーブルに多対多の構成を、そして関連の反対側に多対1の構成を持っていました。結果は単なる混乱でした。

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 = "all"を使わないで保存することができますが、 "オブジェクトが未保存の一時的なインスタンスを参照する - フラッシュする前に一時的なインスタンスを保存する"のような例外が発生するはずです。 – mprabhat

+0

これは動作しません。 – Marvo

関連する問題