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>

基本的に次のリーグのリストを取得するDAOメソッドがあります

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

私は競争を数えるためにいくつかのコードを書きました、そしてそれはと同じくらい簡単でした

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

しかし、getCompetitions()は常に空のセットであるため、失敗しました。

質問:LeagueDAO.list()を使用してリーグのリストを取得する場合、各リーグにすべての競技会もロードする必要がありますか?

4

2 に答える 2

2

cascade="all"を追加

<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"/>

于 2012-04-30T02:58:33.453 に答える
1

私のhbm.xml構成が無効であることが判明しました。1つのテーブルに多対多の構成があり、関連付けの反対側に多対1の構成がありました。結果はただの混乱でした。

于 2012-05-02T21:55:21.023 に答える