Hibernate fetch = join

1. TUser与TOrder 一对多关系

xml代码
     <class name="TUser" table="t_user" catalog="test">
        <id name="id" type="java.lang.Long">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="userName" type="java.lang.String">
            <column name="user_name" />
        </property>
      
        <set name="orders" inverse="true" cascade="all-delete-orphan" fetch="join" lazy="false">
        <key column="USER_ID"></key>
        <one-to-many class="TOrder"/>
        </set>
    </class>

    <class name="TOrder" table="t_order" catalog="test">
        <id name="id" type="java.lang.Long">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="orderName" type="java.lang.String">
            <column name="ORDER_NAME" length="20" />
        </property>
        <many-to-one name="user" class="TUser" >
        <column name="USER_ID"></column>
        </many-to-one>
    </class>



2.  测试

    (1)  List list = session.createQuery("from TUser").list();   

    (2)  List list = session.createQuery("from TUser where id=3 ").list();  

    (3)  TUser u = (TUser)session.get(TUser.class, new Long(3));



3. 结论:

    (1)  fetch策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合。

          该定义在条件查询中无效。

   (2)   lazy=true 或false对join fetch没有任何影响, 均会使用左外连接。

猜你喜欢

转载自bto310.iteye.com/blog/1613685
今日推荐