初学hibernate,临时想到了一个疑问----hibernate get和load方法的疑问? 20

get方法是不支持lazy的,而load是支持的,使用load时,可能会设置映射文件中的lazy属性等,而且还与session的生命周期相关,所以……我的问题是直接使用g... get方法是不支持lazy的,而load是支持的,使用load时,可能会设置映射文件中的lazy属性等,而且还与session的生命周期相关,所以……我的问题是直接使用get加载数据不就完了,干吗使用load加载啊,他们除了lazy的区别,还有其它方面的区别吗?呵呵……谢谢各位大大了! 展开
 我来答
whdbsa
2011-01-21 · TA获得超过828个赞
知道小有建树答主
回答量:687
采纳率:0%
帮助的人:544万
展开全部
get 是当你调用get的时候就去操作数据库
load不一样
当使用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这样做我想是为了节约资源吧 如果你查出来了。。然后还没用程序就结束了(比如方式异常)那就浪费了。。毕竟读数据库是一件比较伤的事情
代理的作用主要是用来AOP编程的 即面向切面编程 这个你直接查AOP百度百科就应该有很详细的解释了
king_cyn
2011-01-21 · TA获得超过124个赞
知道答主
回答量:75
采纳率:0%
帮助的人:59.3万
展开全部
因为加载大量数据需要消耗大量资源,可能很多已经加载的数据并不是用户一定会去看的,所以不是一定需要加载进去,当用户点击去看时,再加载,提高资源的使用效率。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
psuqqvfp
2011-01-21 · TA获得超过1060个赞
知道小有建树答主
回答量:2640
采纳率:0%
帮助的人:935万
展开全部
load支持lazy,get直接加载,区别是吗?
呵呵,是这样的,load有一个好处就是有时我们只是想知道数据库中是否有这条件数据,而不是真的把这条数据查出来,load就可以么,要是get是会查出来的,但我们不需要,这样很耗费性能,懂了吧,比如删除一条信息,你要先确保它在数据库中存在,然后再去删,这样,用load非常方便
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我的私人书库
2011-01-29 · 超过21用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:27.1万
展开全部
操作的时候 你把sql语句打印出来看一下就明白了
在性能上load方法优于get方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式