您的位置:首页 > 其它

Hibernate5教程之三get和load

2017-07-20 12:47 274 查看
Hibernate有懒加载这一机制 ,何为懒加载呢?

懒加载:调用时并不加载,而等到第一次调用非主键的时候才真正的开启SQL检索。

我们在写xml的Mapping文件时,class标签中的lazy属性默认为false,lazy属性就是标记当前类是否开启懒加载,true为开启,false为关闭。可是当多表关系时,如:one-to-one、set、list等,默认的lazy为true

那么怎么体现懒加载呢?

这就得说说get和load方法了:

如果lazy=true

那么get:勤加载,load:懒加载

加载的过程是什么呢?

get:只要调用那么就先去一级缓存(Session级缓存)中检索,如果存在就放,不存在那么就看有没有启用二级缓存(Hibernate3之前是直接跳过二级缓存),如启用了二级缓存那么就会检索二级缓存,存在就返回,不存在就发起SQL查询到数据库,查询到之后存储到一级缓存中并返回结果。

load:调用的时候不会进行检索,只是将主键的值设置到了对象中就结束了,等第一次调用非主键的时候才去一级缓存中检索是否存在,存在就返回,不存在就检索是否开启二级缓存,存在就返回,不存在就发起SQL查询到数据库,查询到之后存储到一级缓存中并返回结果。

如果lazy=false

那么get和load就没有区别,load也就变成了勤加载

一般说来:

我们认为调用load那么对象就一定是存在数据库中的,所以如果不存在那么就会报异常

而get则无所谓,不存在就是null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息