Hibernate 04 : 单向多对一

1.概念
①多对一
一的一端
多的一端
User
Order
Order
OrderItem
Book
OrderItem
②单向:从Order对象中可以获取到User对象的引用,而从User对象不能获取到Order对象的引用。

2.创建持久化类
①User[一的一端]:不需要包含Order集合的引用
Hibernate 04 : 单向多对一
②Order[多的一端]:需要包含User对象的引 用
             Hibernate 04 : 单向多对一
3.hbm文件中的配置
①User[一的一端]:进行普通的单表映射即可
②Order[多的一端]:
Hibernate 04 : 单向多对一
4.关于保存的顺序
如果先保存Order对象,再保存关联的User对象,则会多出额外的update语句。原因:
①保存Order对象时,USER_FK这一列无法赋值,只能暂时设置为null
②必须等到User对象保存完毕,生成了User的主键值,然后才能回过头来设置ORDERS表的外键列的值

5.关于延迟加载
①默认情况下,加载一个Order对象,不会立即加载关联的User对象,而是对User对象采取延迟加载策略。使用一个代理对象作为User对象,当用到非OID的属性值时才发送SQL语句,查询User对象。
②凡是有延迟加载存在的场合,都有产生“懒加载初始化异常”的可能。
③设置立即加载
<many-to-one lazy ="false"
查询得到Order之后,就会立即查询关联的User对象。
④迫切左外连接
<many-to-one fetch ="join"

    select
        order0_.ORDER_ID as ORDER_ID1_0_1_,
        order0_.ORDER_NAME as ORDER_NA2_0_1_,
        order0_.USER_FK as USER_FK3_0_1_,
        user1_.USER_ID as USER_ID1_1_0_,
        user1_.USER_NAME as USER_NAM2_1_0_
    from
        ORDERS order0_
    left outer join
        USERS user1_
            on order0_.USER_FK=user1_.USER_ID
    where
        order0_.ORDER_ID=?