Hibernate中get和load的区别
来源:互联网 发布:linux的进程调度策略 编辑:程序博客网 时间:2024/05/01 12:15
当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,调用load()方法时则返回持久对象的代理类实例,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为null值,查看日志并没有Hibernate SQL输出,说明没有执行查询操作,当代理类实例通过getXXX()方法获取属性值时,Hiberante才真正执行数据库查询操作;当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,调用load()方法则是立即执行数据库并直接返回实体类,并不返回代理类。而调用get()方法时不管lazy为何值,都直接返回实体类。
总结:
lazy=true;load方式返回代理类实例,此时要用到的时候才去执行数据库的查询操作
lazy=false;load方式直接查询数据库,返回实体
get方式不管任何情况都是直接返回实体类。
其实get方式查找的顺序是: session缓存-->二级缓存-->数据库
1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。这个相对比较简单,也没有太大的争议。主要要说明的一点就是在这个版本中get方法也会查找二级缓存!
load方式的查找顺序是:
1:lazy=true Session缓存-->在使用的时候才去查找二级缓存和数据库
2:lazy=false session缓存-->二级缓存-->数据库
总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
所以对于不愿意进行异常处理的时候,你最好是选择不延迟加载,或则采用get的方式!
- Hibernate中load和get的区别
- Hibernate中get和load的区别
- Hibernate中get和load的区别
- hibernate中get和load的区别
- Hibernate中get和load的区别
- hibernate 中get()和load()的区别
- Hibernate中get和load的区别
- Hibernate中 get和load的区别
- Hibernate中get和load的区别
- 【Hibernate中load和get的区别】
- Hibernate中get和load的区别
- Hibernate中load和get的区别
- Hibernate中get和load的区别
- Hibernate中get()和load()的区别
- Hibernate 中 get 和 load的区别
- Hibernate中get和load的区别
- hibernate中load和get的区别
- hibernate中get和load的区别
- 一个表单form 多个action提交
- MYSQL触发器 for 5.01
- Python30处理重定向
- [盗贼]经典PK
- python操作IE完整版
- Hibernate中get和load的区别
- BCB2009编译一项目出错ILink32Error,不能打开一个乱码文件名
- 浅析C#编程中的内存管理
- 在asp/asp.net 中处理客户端数字证书
- 基于.Net Compact Framework的窗体GUI设计
- Ruby 系统已经定义的全局变量
- 使用 SchemaExport 自动建表
- git daemon
- 一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度