1対多と多対1の関連付けを遅延ロードできますが、多対多の関連付けではできません。休止状態で多対多のコレクションを遅延ロードする方法はありますか?
私たちには、商人の住所がある都市があります。 商人は複数の住所を持つことができ、複数の商人は同じ住所を持つことができます。
我々は、getと商人をロードし、
Merchant merchant = (Merchant) hib_session.get(Merchant.class, id);
System.out.println(merchant.getName());
それは我々がそれらを反復処理するまでのアドレスがロードされていない、大丈夫です。
しかし、我々は、商人のリストをロードする際
City city = (City) hib_session.get(City.class, city_name);
for(Merchant merchant : city.getMerchants()) {
System.out.println(merchant.getName());
}
我々はアドレスを取得していない場合でも、自動的に休止状態にそれらをロードします。
Here's an example of my problem.
マッピング:
<class name="Merchant" table="Merchants" lazy="true">
<id name="id"
type="long"
column="id">
<generator class="native"></generator>
</id>
<set name="addresses" table="AdressesMerchant" lazy="true">
<key column="merchant_id"></key>
<many-to-many class="Adresses" column="address_id"/>
</set>
</class>
<class name="Address" table="Adresses" lazy="true">
<id name="id"
type="long"
column="id">
<generator class="native"></generator>
</id>
<set name="merchants" table="AdressesMerchant" lazy="true">
<key column="adress_id"/>
<many-to-many column="merchant_id" class="Merchant"/>
</set>
</class>
任意のアイデア?
奇妙に聞こえる。あなたはその行動を確認できますか?あなたのコレクションはどのようにマップされていますか? – Bozho
@Bozhoクエリを記録することで動作を確認でき、Hibernateがアドレスをロードすることがわかります。私は質問にマッピングを追加しました。 – codea
これは話題ではありませんが、inverseでマークされた多対多の関係の1つであってはなりませんか? – Ralph