Hibernate初探【3】Session中get()和load()的区别

准备测试数据(三条)



1、get()方法直接返回实体类,如果查不到数据则返回null。load()会

  返回一个实体代理对象(当前这个对象可以自动转化为实体对象),

  但当代理对象被调用时,如果没有数据不存在,就会抛出个

  org.hibernate.ObjectNotFoundException异常


load得到的代理对象还没有使用,所以还没有被实例化,因此没有报错

一旦使用,则抛出org.hibernate.ObjectNotFoundException异常



2.load先到缓存(session缓存/二级缓存)中去查,如果没有则返回一个

  代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时

  候,才到DB中查询,这就是我们常说的load在默认情况下支持延迟加

  载(lazy)

load方法同样可以使用以下检验get方式检测


3. get先到缓存(session缓存/二级缓存)中去查,如果没有就到DB中去

  查(即马上发出sql)。总之,如果你确定DB中有这个对象就用

  load(),不确定就用get()(这样效率高)  

Employee e=(Employee) ss.get(Employee.class,3);
Employee ee=(Employee) ss.get(Employee.class,3);
两次查询,第一次将生成Hql语句,而第二次get将从hibernate缓存中进行查找
<img src="https://img-blog.csdn.net/20160520214104382?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-size:14px;" alt="" />
若两次get都是查询不存在的对象

Employee e=(Employee) ss.get(Employee.class,4);
Employee ee=(Employee) ss.get(Employee.class,4);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值