Hibernate 里的 lazy和 fetch cascade 和 inverse

fetch 和 lazy 主要是用来级联查询的,
而 cascade 和 inverse 主要是用来级联插入和修改的

lazy是延迟加载,默认是延迟加载。
主要是为了系统的性能,当一张表引用到另外一张表时,如果不是立即需要另外一张表的内容,就可以采取延迟加载,直到要用到时才加载另外一张表。

延迟加载的作用就是增加系统的性能度,得到你想要的数据,你不想要的数据不会给你查出来

fetch参数指定了关联对象抓取的方式是select查询还是join查询,
select方式时先查询返回要查询的主体对象(列表),再根据关联外键 id,
每一个对象发一个select查询,获取关联的对象,形成n+1次查 询;
而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查询关联对象。 另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用 select方式,除非你在hql中指定join fetch某个关联对象。fetch策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。

 inverse 属性默认是false的,表示由己方来维护关系。cascade="all" 时候能级联操作(all指定了操作的程度),而none的时候只是维持两者之间的关系(如果inverse="false")
      在一对多映射中,一的一方要设<set inverse="true" casecade="save-update" />,多的一方要设<many-to-one inverse=false />

casecade的属性有

1 none:该方式是Hibernate默认的工作模式,不进行级联
2 save-update:当执行删除时,没有真正的删除级联,只是把级联的id设为null;
3 delete:删除实例的所有的相级联的
4 delete-orphan:彻底的删除级联的实例
5 all:当调用session.delete(xx);时候,会删除所有级联的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值