如何在hibernate中延迟加载多对多集合?

cod*_*dea 12 java many-to-many hibernate lazy-loading

我可以懒惰加载一对多和多对一的关联,但我不能与多对多关联.

我们有一个城市,我们有商人有地址.商家可以拥有多个地址,多个商家可以拥有相同的地址.

当我们用get获取商家时,

Merchant merchant = (Merchant) hib_session.get(Merchant.class, id);
System.out.println(merchant.getName());
Run Code Online (Sandbox Code Playgroud)

没关系,在我们遍历它们之前,地址不会加载.

但是当我们加载商家列表时,

City city = (City) hib_session.get(City.class, city_name);
for(Merchant merchant : city.getMerchants()) {
  System.out.println(merchant.getName());
}
Run Code Online (Sandbox Code Playgroud)

即使我们没有获取地址,hibernate也会自动加载它们.

这是我的问题的一个例子.

映射:

<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>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

小智 -1

您可以使用 criteria 对象来查询和使用 FetchMode.EAGER。