【Hibernate】Hibernate中的get和load有何不同?
来源:互联网 发布:mac 安装hadoop 编辑:程序博客网 时间:2024/06/05 10:37
http://javarevisited.blogspot.tw/2012/07/hibernate-get-and-load-difference-interview-question.html
最大的差别:检索策略不同
get:
如果Session缓存中没有相关对象,get会立即访问数据库;返回一个被完全初始化的对象;可能涉及多次数据库调用。
——session.get()、query.list()总是会进行立即检索,即便已设为使用延迟检索。
load:
如果Session缓存中没有相关对象,load并不立即查询数据库,不执行select,仅返回BO的一个代理类实例:
- 这个代理类扩展自BO类,由Hibernate在运行时使用CGLIB工具动态产生;
- 代理类实例仅初始化OID属性,其他属性都是null
- 第一次访问BO属性(非ID属性)时,Hibernate会执行select+初始化代理类实例
——若select查不到,则抛ObjectNotFoundException
——getId()并不能触发查询。
这种延迟初始化能够节省数据库查询,提高性能。
当对象找不到时的行为不同
如果在缓存和数据库中都找不到对象,则:
get返回null;
load抛出ObjectNotFoundException。
访问数据库
get总是访问数据库;
load并不总是访问数据库。——getId不访问
代理
get要么返回null,要么返回一个完全初始化的对象;
load返回proxy。
性能
load性能更高。
使用场景
当想判断实例是否存在时,用get;——因为不存在的话,就会返回null
当确信实例肯定存在时,用load。
如果只需访问对象ID,用load。
- 【Hibernate】Hibernate中的get和load有何不同?
- 【Hibernate】Hibernate中save、persist和saveOrUpdate有何不同?
- Mybatis和Hibernate处理主从关系有何不同
- Hibernate中的get()和load()
- hibernate中的get和load
- Hibernate中的get方法和load方法有啥区别
- hibernate get()和load()
- hibernate get()和load()
- hibernate load 和get
- hibernate get 和load
- hibernate中的get和load方法
- hibernate中的load和get的区别?
- 【hibernate】session中的load和get对比
- hibernate中的load和get的区别
- Hibernate中的get与load有什么区别?
- Hibernate中的JUnit和session中的get和load方法
- Hibernate中get和load有什么不同之处?
- 【Hibernate】中session的get()和load()有什么区别?
- java的十种设计模式
- VS2005创建一个WinCE的应用程序
- 解读Web应用程序安全性问题的本质
- 浏览器如何工作How browsers work翻译
- 第四章 通知Bean
- 【Hibernate】Hibernate中的get和load有何不同?
- IOS--简单的网络NSURLConnection的使用
- NYOJ - 探寻宝藏(dp)
- Holo Theme 大行其道, Android Design 无人知晓?
- vc++操作excel
- Android WIFI连接开发 WIFI工具类
- android:descendantFocusability用法简析
- visio vsd 文件批量转换为 jpg,svg,vdx 文件
- ibatis处理blob字段和clob字段