hibernate 中lazy、banth 、fetch的对比

    lazy 用于多种标签中,表示此标签代表对象的初始化时机,一般取值proxy和false,默认proxy即延迟加载,对于many-to-one等标签一般用lazy和fetch,lazy默认proxy,表示即使其他属性加载此对象属性保持懒加载,除非访问本对象内部属性。而fetch取值为select、join,默认为select即正常模式可忽略,若取值join表示采取迫切左外连接方式,并且忽略lazy属性,当其他平行属性初始化时马上初始化本对象。

    对于set标签,一般用lazy banth 和fetch三个都用到,banth-size为批量查询的意思,作用为当需要查询的请求到达指定值之后用一个综合的sql语句统一查询,减少sql语句。fetch此处取值select,subselect和join,其中当取值subselect时将忽略banth,即当访问set内部属性时将使用子查询in语句的形式发送两条语句即父子各一条查询语句初始化所有还未初始化的set对象,当取值为join时采取迫切做外链接方式只需一条语句初始化所有未初始化的set对象,并且忽略lazy的限制


    对比:
    对于一次使用iterator遍历n次set的查询fetch取值select时sql语句为n+1条,而subselect为2次,join为1次并且将忽略lazy属性


    对于HQL的迫切左外连接和左外连接: left join fetch VS left join  
          用于查询对象中有子对象时使用
          前者多一个fetch关键字表示立即加载忽略lazy,这将给予hql在全局lazy下拥有立即加载的可操作性更加灵活
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值