2

私は約300のエンティティがあるプロジェクトでHibernateを使用しています。

多くのエンティティリレーションでは、遅延読み込みは必要ないためdefault-lazy=false、マッピングで使用しました。遅延読み込みが必要な場合はlazy=true、コレクションとlazy=proxy多対1のリレーションに使用しました。

lazy=trueコレクションには問題なく機能しますがlazy=proxy、多対1の場合は無視されます。VehicleUserエンティティとの多対1のマッピングを持つエンティティをクエリすると、HibernateはUserエンティティもロードします。つまり、を無視しlazy=proxyます。以下は、マッピングファイルの短いバージョンです。

<hibernate-mapping package="com.test.bean" default-lazy="false">
<class name="Vehicle" table="tbl_vehicle" optimistic-lock="version" >
    <id name="vehicleNo" column="VEHICLE_NO" type="int" node="@id">
        <generator class="com.test.TestSequenceGenerator" />
    </id>
    <version name="version" column="version" type="integer" unsaved-value="undefined" generated="never"/>
    <property name="color" />
    <property name="wheel" />
    <property name="seat" />

    <many-to-one name="user" class="User" embed-xml="false" lazy="proxy" fetch="select">
        <column name="user_id" not-null="true" />
    </many-to-one>
</class>

<class name="User" table="tbl_user" optimistic-lock="version" >
    <id name="userId" column="user_id" type="int" node="@id">
        <generator class="com.test.TestSequenceGenerator" />
    </id>
    <version name="version" column="version" type="integer" unsaved-value="undefined" generated="never"/>

    <property name="name" />

    <set name="vehicles" table="tbl_vehicle" cascade="all"
            inverse="true" fetch="select" lazy="true">
              <key>
                  <column name="user_id" not-null="true" />
              </key>
              <one-to-many class="Vehicle" />
           </set>

</class>
</hibernate-mapping>
4

1 に答える 1

0

私は皆さんに同意します。ただし、ここでは、lazy="proxy" が機能するために、クラス マッピング User に default-lazy="false" を設定しないでください。

于 2014-01-28T13:13:00.023 に答える