Hibernate的get与load的区别
2013-11-03 16:48
288 查看
Hibernate中session 的load和get方法的区别:
延迟加载:load是true 而get是false
意思就是load采用延迟加载的方式,而get不是,hibernate思想是 既然这个方法支持延迟加载,他就认为这个对象一定存在于数据库中。在你执行语句 USER user=(USER)session.load(USER.class,id)的时候,hibernate就干了一件事
1、查询session缓存 ,如果缓存中没有对象那么就创建一个代理。
因为延迟加载需要代理来执行,所以就创建了个代理,ok到此为止, 这句话就干了这个,并没有去数据库交互查询。在使用的时候load方法会去二级缓存中查询,查询不到就到数据库中查询,如果数据库也不存在,那么就会抛出ObjectNotFoundException; 而get()方法不会假定数据是在数据库中存在的,如果不存在他返回的是null
load查询顺序--->session一级缓存查找---->找不到的话创建代理---->使用的时候首先查找二级缓存-->二级缓存中没有的话查找数据库--->数据库中还没有的话那就抛出ObjectNotFoundException
get查找顺序 --->session一级缓存---->Hibernate二级缓存 --->数据库中-->如果还没有就返回NULL
延迟加载:load是true 而get是false
意思就是load采用延迟加载的方式,而get不是,hibernate思想是 既然这个方法支持延迟加载,他就认为这个对象一定存在于数据库中。在你执行语句 USER user=(USER)session.load(USER.class,id)的时候,hibernate就干了一件事
1、查询session缓存 ,如果缓存中没有对象那么就创建一个代理。
因为延迟加载需要代理来执行,所以就创建了个代理,ok到此为止, 这句话就干了这个,并没有去数据库交互查询。在使用的时候load方法会去二级缓存中查询,查询不到就到数据库中查询,如果数据库也不存在,那么就会抛出ObjectNotFoundException; 而get()方法不会假定数据是在数据库中存在的,如果不存在他返回的是null
load查询顺序--->session一级缓存查找---->找不到的话创建代理---->使用的时候首先查找二级缓存-->二级缓存中没有的话查找数据库--->数据库中还没有的话那就抛出ObjectNotFoundException
get查找顺序 --->session一级缓存---->Hibernate二级缓存 --->数据库中-->如果还没有就返回NULL
相关文章推荐
- 杰奇登录后的东西都是在session里面的
- ASP中SESSION无法保存问题的解决办法
- Oracle中的Connect/session和process的区别及关系介绍
- wap开发中如何有效的利用缓存减少消息的传送量
- 解析PHP的session过期设置
- 深入解析Session是否必须依赖Cookie
- 新手菜鸟必读:session与cookie的区别
- PHP Session变量不能传送到下一页的解决方法
- PHP中的session永不过期的解决思路及实现方法分享
- ASP.NET中在不同的子域中共享Session的具体方法
- Asp.net中判断一个session是否合法的方法
- 引用全局程序集缓存内的程序集的方法
- asp Response.flush 实时显示进度
- ASP中Session技巧 默认过期时间为20分钟
- 几种判断asp.net中session过期方法的比较
- 在ASP.NET中,设置Session的过期时间的方法
- ASP.NET缓存管理的几种方法
- Session服务器配置指南与使用经验的深入解析
- 判断Session的过期时间 采用JavaScript实时显示剩余多少秒
- ASP.NET Session的七点认识小结