在hibernate中使用default-lazy = false时,lazy =“proxy”在多对一映射中不起作用

时间:2012-09-12 11:06:54

标签: hibernate lazy-loading

我在一个项目中使用Hibernate,我们有300个实体。

对于许多实体关系,我们不需要延迟加载,因此我们在映射中使用了default-lazy=false,在我们需要延迟加载的地方,我们使用了lazy=true用于集合,而lazy=proxy用于多对一的关系。

lazy=true适用于集合,但lazy=proxy在多对一情况下被忽略。当我查询与用户实体具有多对一映射的Vehicle实体时,Hibernate也会加载用户实体,即忽略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>

1 个答案:

答案 0 :(得分:0)

我同意你的意见。 但是,在这里,类映射User不应该使用default-lazy =“false”来使lazy =“proxy”起作用。