lazy与fetch

笔记:

<class name="Student" table="student" >
		<id name="studentNO" type="int">
			<generator class="native"></generator>
		</id>
		<property name="studentName" type="string"/>
		<many-to-one name="classes" column="classNO" class="Classes" fetch="join" lazy="false"></many-to-one>
	</class>

 当用load方法加载Student时,会延时加载

 

当不设fetch=join用lazy=true时:

对于many-to-one,one-to-one,集合如component,set,map,array,list这些本身默认lazy=true的属性,不管是load还是get,表现出来的都是使用classes时才加载,看上去get在这里也是延时加载了,可见延不延时加载在此时只是针对当前对象的普通属性。但是当lazy=false时,这些属性,不管是load还是get都是都是同时发出两条sql,尽管load方法是在使用当前对象时才发出sql,而get是在一执行时就发出2条sql。

 

当设fetch=join时

查询student时,会同时查出classes,而且是通过一条连接查询实现,这个时候集合属性里面的lazy就没有作用了。

对于load会在使用student或classes时,发出sql,对于get会在执行进就发出sql

 

  • Join fetching - Hibernate retrieves the associated instance or collection in the same SELECT , using an OUTER JOIN .用外连接检索相关的实例或集合,通过一条select语句(实了下,发现是左外连接)

  • Select fetching - a second SELECT is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying lazy="false" , this second select will only be executed when you actually access the association.通过第二条select语句检索相关的实体或集合,但是前提lazy=false,并且只有在访问相关数据时才会发出第二条sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值