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
懒加载:调用时并不加载,而等到第一次调用非主键的时候才真正的开启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
相关文章推荐
- 宋体元素1.jQuery实例 2.jQuery load get post 数据提交方式 3.jquery ajax 应用 4.jquery小案例-java教程
- Hibernate5教程之二openSession和getCurrentSession
- Hibernate中 get与load的区别
- Hibernate中get和load方法的区别
- load()与get()方法的关键区别:
- MXNet官方文档教程(1):扬帆起航(Get Started)
- hibernate get load 区别
- hibernate 中的get与load的区别
- 数据库返回Hibernate中的get和load有何不同?
- $.get $.post $.getJSON $.load异步请求的区别
- hibernate持久化方法get和load的区别
- 关于hibernate查找方法get/load区别
- Hibernate中Session的load()和get()方法的使用区别
- 当file_get_contents或者simplexml_load_file的时候乱码
- Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
- $.post(),$.ajax(),$.get()和load()
- jQuery教程 - Ajax之$.get()方法和$.post()方法
- jQuery.get/post/load等简介
- Hibernate中get和load方法的区别
- CGIC简明教程2:获取Get请求字符串