代码改变世界

浅谈hibernate(cascade,lazy,inverse,fetch)

2012-12-25 00:13  eoeAndroid社区  阅读(198)  评论(0编辑  收藏  举报

1.cascade是否执行级联操作

                     <set name="children" lazy="true" cascade="all">

   在保存主表的时候,如果没有保存从表信息,会抛出异常,如果设置了级联关系,可以自动先保存从表,在保存主表

    all: 所有情况下均进行关联操作,即save-update和delete。
    none: 所有情况下均不进行关联操作。这是默认值。 
    save-update: 在执行save/update/saveOrUpdate时进行关联操作。

2.inverse指定哪一方不控制关联关系,一般在set上(1端不维护)

                    <set name="children" lazy="true"  inverse="true">

3.lazy  :延迟加载

<class name=”mypack.Customer” table=”CUSTOMER” lazy=”false”>

laz    Lazy属性为false:立即检索,一次性访问有关联关系的所有表。

llaz   Lazy属性为true:(默认)延迟检索,只访问主表数据,从表数据不会立即访问,只有当用到从表的时候会自动访问。

 Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。

 Hibernate 的延迟加载(lazy load)本质上就是代理模式的应用

4.fetch :抓取策略,类似于lazy

<class name=”mypack.Customer” table=”CUSTOMER” fetch =”join”>

fetch="join”:类似于lazy=false,一次性查完

fetch="select”:类似于lazy=true