hibernate加载对象(get和load的区别)
来源:互联网 发布:淘宝免单怎么设置 编辑:程序博客网 时间:2024/05/18 17:41
在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式:
通过session.get()方法和通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的。
一、load加载方式
当使用load方法来得到一个对象时,会使用延迟加载的机制来加载这个对象。如果对象不存在,则会抛出ObjectNotFoundException异常。
即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象。
二、get加载方式
相对于load的延迟加载方式,get就直接的多,当我们使用session.get()方法来得到一个对象时,不管我们使不使用这个对象,此时都会发出sql语句去从数据库中查询出来。如果数据库中没有,则返回null。
总结:
如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实就hibernate的一级缓存),如果没有,再去二级缓存中去查询,如果再没有,就去数据库中查询,仍然没有找到的话,就返回null。
使用load方法的话,hibernate会认定该id对应的数据一定存在,它也会先去session缓存中去查找,如果没有找到,hibernate会根据配置对象的lazy属性值来确定是否使用延迟加载。如果lazy=‘true’ ,就使用延迟加载,返回该代理对象,等到真正访问到该对象的属性时才会去二级缓存中查询,如果没有,再去数据库中查询,如果还没有,就抛出org.hibernate.ObjectNotFoundException异常。如果lazy='false' 则不使用延迟加载,这是load的访问机制就和get一样了。
ps:当明确知道数据库中有user对象时,建议使用load方法,因为代理模式可以提高效率;
如果不确定是否有user对象时,可以用get方法来判断是否为null。
- hibernate加载对象(get和load的区别)
- Hibernate加载数据时get和load方法的区别
- Hibernate加载数据时get和load方法的区别
- 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延迟加载(get和load的区别)
- hibernate延迟加载(get和load的区别)
- hibernate延迟加载(get和load的区别)
- hibernate延迟加载(get和load的区别)
- hibernate延迟加载(get和load的区别)
- hibernate延迟加载(get和load的区别)
- Android-UnitTest
- 原始套接字SOCK_RAW
- 过滤器,监听器,拦截器的区别
- 【Android Demo】通过WebService获取今日天气情况
- java 开发环境配置
- hibernate加载对象(get和load的区别)
- Web前端开发-资料分享-JS篇
- Eclipse创建Tomcat时Next按钮是灰色,解决方案!
- 设置Android app的字体不随系统全局字体大小的变动而变动
- 阿里云之企业及分布式应用EDAS使用操作
- Android之PopupWindow类似微信右上角的弹出菜单
- hypertable编译安装
- android 自定义相机
- skynet学习笔记二