首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • Hibernate新手关于lazy loading的困惑 [已结贴,结贴人:yihaijian1]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 21:37:14 楼主
    刚开始接触Hibernate,跟着光盘里面的视频教程学习如何生成hbm文件啊,如何配置一对一,一对多,多对多关系啊,但是一段时间学习下来,感觉自己对
    Hibernate还是没有概念,

    我看JavaEye里面一位大师说学习Hibernate最重要的是学习Hibernate的运行原理,但是如何掌握呢?
    他还说Hibernate的精华在于无与伦比的灵巧的对象持久层设计,如何去体会掌握这种灵巧的设计呢?
    最后回到主题吧,在hibernate中为什么需要延迟加载,什么时候需要延迟加载,延迟加载带来的好处是什么?

    一口气问了3个问题,好贪心,哈哈,希望大家能说多少说多少,给我学习Hibernate一些有意义的指导,谢谢。。
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 21:37:161楼 得分:0
    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yihaijian1】截止到2008-07-07 21:37:11的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:120                     
    结贴的总数量:2                        结贴的总分数:120                     
    无满意结贴数:0                        无满意结贴分:0                       
    未结的帖子数:0                        未结的总分数:0                       
    结贴的百分比:100.00%              结分的百分比:100.00%                 
    无满意结贴率:0.00  %              无满意结分率:0.00  %                 
    敬礼!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 22:13:002楼 得分:0
    延迟加载是为了提高性能  你现在可以不用钻那么透  自己多联系慢慢就会理解的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CAYU
    • 等级:
    发表于:2008-07-07 23:32:453楼 得分:0
    延迟加载,理论上可以提高性能,但实际应用中并不能够得到那样的效果,
    Hibernate 的设计是不错,但在应用上就要选择性的使用了。陷阱太多。
    初学的人最好还是从jdbc开始。

    一个好的设计不应该出现延迟加载这种东西。
    要使用的数据。就一次查询出来。不要这里查询一下,那里在查询一下,性能会很差。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • M_song
    • 等级:
    发表于:2008-07-08 08:24:244楼 得分:0
    为什么需要延迟加载?
        解决性能问题;
    什么时候需要延迟加载?
        当性能有瓶颈的时候;
    延迟加载带来的好处是什么?
      提高性能;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 08:53:245楼 得分:0
    该回复于2008-07-08 09:58:51被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 08:59:206楼 得分:0
    要看情况而定。不是延迟加载就是好事。

    不过建议楼主先搞清楚 数据库基本知识。比如 左右链接,内连接,全连接这些概念
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 09:31:587楼 得分:0
    在hibernate中为什么需要延迟加载,
    延迟加载可以在不必要查询数据的时候不做查询。避免执行多余的查询而影响性能。

    什么时候需要延迟加载,
    如果有些对象不需要立即加载的时候。比如一对多的映射中 我只要一段对象的数据,多的一端不许要查询。就可以将集合设置为延迟。

    延迟加载带来的好处是什么?

    适当的时候延迟可以提高性能。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 12:23:178楼 得分:0
    LS说得不错,可以还给我其他两个问题一点提示吗?就是如何去掌握Hibernate的运行原理和灵巧的对象持久层设计。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 16:18:299楼 得分:0
    该回复于2008-07-08 20:50:28被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 13:20:2610楼 得分:0
    比如在一个学生成绩管理系统中,拿班级和学生来做讲,班级中有一个学生集合,就是本班级的所有学生。当你要查看这个班级的基本信息的时候,hibernate会把你要的班级实体从数据库中取出来,想想,如果这个班级中有100个学生(甚至更多),是不是要把所有的这个班的学生都加载到内存中呢?所以这个时候就可以设置为延迟加载。等你要用的时候再加载这些对象。配置文件中,set集合优先考虑延迟加载,当然你也可以在程序中显式的加载这些对象。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ybbkd2
    • 等级:
    发表于:2008-07-20 18:39:3111楼 得分:0
    引用 3 楼 CAYU 的回复:
    延迟加载,理论上可以提高性能,但实际应用中并不能够得到那样的效果,
    Hibernate 的设计是不错,但在应用上就要选择性的使用了。陷阱太多。
    初学的人最好还是从jdbc开始。

    一个好的设计不应该出现延迟加载这种东西。
    要使用的数据。就一次查询出来。不要这里查询一下,那里在查询一下,性能会很差。


    精辟!!

    与我理解的差不多,好的设计是应该避免延迟加载的,我从来不用 一对多关系的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-21 09:21:4712楼 得分:0
    引用 3 楼 CAYU 的回复:
    延迟加载,理论上可以提高性能,但实际应用中并不能够得到那样的效果,
    Hibernate 的设计是不错,但在应用上就要选择性的使用了。陷阱太多。
    初学的人最好还是从jdbc开始。

    一个好的设计不应该出现延迟加载这种东西。
    要使用的数据。就一次查询出来。不要这里查询一下,那里在查询一下,性能会很差。



    好的设计不需要延迟加载么??受教了。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-21 16:46:4813楼 得分:50
    引用 3 楼 CAYU 的回复:
    延迟加载,理论上可以提高性能,但实际应用中并不能够得到那样的效果,
    Hibernate 的设计是不错,但在应用上就要选择性的使用了。陷阱太多。
    初学的人最好还是从jdbc开始。

    一个好的设计不应该出现延迟加载这种东西。
    要使用的数据。就一次查询出来。不要这里查询一下,那里在查询一下,性能会很差。

    瀑布汗!不知道不要胡说,误导小朋友...
    Hibernate是一个O/R Mapping,不是仅仅简单的封装JDBC. O/R Mapping首先要解决的是O/R不匹配,就是对象和关系模型不匹配。
    在关系模型中,数据是以二维表来表示的,并有严格的数学为理论基础,比如笛卡尔积、投影...等等
    对象模型是以对象理论为基础的,就是继承、封装、多态。
    所以我们表示一个多对一关系,比如学生-老师,在数据库表中就用学生表有一个老师表的外键来表示,而在一个对象模型中,则是学生对象有一个老师对象的引用,即学生这个类里有一个老师类型的成员变量。
    那好了,在一个有一点规模的项目中,我们会发现没有孤孤单单的一个类,一个类总是和别人发生关系,要么持有别的对象的引用,要么被别的对象引用,这些引用还有自己的引用...这样一个对象就形成一个网状的对象图。当我们load一个对象的时候,如果没有懒加载,完了,我们要整个load这个对象图出来!!
    这就是延迟加载的作用,在你用到的时候再加载相应的数据。

    另外,不要以为你没有用one-to-many就没有用到懒加载,hibernate中所有对对象的引用默认都是懒加载的。
    所以many-to-one也是懒加载的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-21 20:31:5014楼 得分:0
    引用 13 楼 steven_cheng 的回复:
    引用 3 楼 CAYU 的回复:
    延迟加载,理论上可以提高性能,但实际应用中并不能够得到那样的效果,
    Hibernate 的设计是不错,但在应用上就要选择性的使用了。陷阱太多。
    初学的人最好还是从jdbc开始。

    一个好的设计不应该出现延迟加载这种东西。
    要使用的数据。就一次查询出来。不要这里查询一下,那里在查询一下,性能会很差。

    瀑布汗!不知道不要胡说,误导小朋友...
    Hibernate是一个O/R Mapping,不是仅仅简单…

    看得出,这位兄台,是做过真实项目的.说的不错!
    其实小的项目,根本就不需要HIBERNATE,反而还麻烦,但是我们为什么要学习她呢,原因就是因为她应用到企业级应用的时候,她的优点就显示出来了.
    我个人认为延迟加载是为了提高企业级应用的性能.企业做软件都考虑性价比的,技术是为需求服务的!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-22 01:41:4715楼 得分:0
    最近一直在装Mac OS X,都把Java给抛弃了,好久没来论坛拉,谢谢13楼朋友的回复,分给你拉....
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved