Hibernate5教程之三get和load

来源:互联网 发布:html实时数据页面设计 编辑:程序博客网 时间:2024/05/21 07:55

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