Hibernate中get()与load() 区别(举例说明)

 我来答
万重山外山
推荐于2016-09-05 · TA获得超过233个赞
知道答主
回答量:95
采纳率:0%
帮助的人:74.6万
展开全部
Get: (1)不支持延迟加载即执行get()方法的时候就发Select语句 (2)当在数据库中查不到记录的时候不会抛出异常,会返回一个null; Load: (1)支持延迟加载即需要用到记录数据的时候在发Select语句; (2)当在数据库中查不到记录的时候会抛出ObjectNotFoundException异常;
当使用session中的load方法查询数据库中的记录时,我们返回的是一个代理对象,而不是真正需要的那个对象;例如数据库中存有个Student表,我们有cn.binyulan.doman.Student的领域对象,如果查询Id值为“200626313”的Student stu = (Student)session.load(Student.class,"200626313"),然后我们打印System.out.println(stu.getClass);得到的结果为Student$$EnhancerByCGLIB$$5a7cc325,名字很奇怪吧,这个对象是Hibernate帮我们生成的,从名字可以看出它是对Student类的增强类的对象,其实这就是个代理对象,这个对象里并没有我们需要的Student的数据,所以如果你在session关闭后在使用stu来获取信息,如stu.getId();就会出现如下异常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session,这就说明了stu中没有我们需要的数据了。
hibernate这样做我想是为了节约资源吧 如果你查出来了。。然后还没用程序就结束了(比如方式异常)那就浪费了。。毕竟读数据库是一件比较伤的事情
匿名用户
2011-08-20
展开全部
建议使用get(),因为查出空值时不报错,load()在查不到数据时会报错,他们都是先从缓存中查找,然后到数据库中查找。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sagliuy
2011-08-19
知道答主
回答量:45
采纳率:0%
帮助的人:21.2万
展开全部
load支持延迟加载的,就是第一次调用了load方法的,如果下次还调用就直接调用内存中的数据,不用再去数据库中去查找的,get就不行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式