abcbuzhiming 2013-07-19 13:04 采纳率: 0%
浏览 246
已采纳

hibernate的底层是先映射后搜索,还是先搜索后映射?

最近在做级联表的时候,发觉hibernate能用级联表映射的类对象中的一个属性进行排序,于是就有了这个想法,在底层,hibernate是先把数据库里的数据全部映射成对象后再展开搜索,还是其实仍然是sql搜索后组装成对象?如果是前者的话,几kw数据的表映射起来不是很慢?

  • 写回答

3条回答 默认 最新

  • h248980496 2013-07-19 13:36
    关注

    个人判断应该是一种策略,帮你把hql语句根据orm映射的关系,将对象名转换成表名,拼装成所连接的数据库的最合理的sql语句,执行查询,再进行对象封装。所以当你配置了显示sql时,是可以看到hibernate翻译过的sql语句的,将映射的字段都罗列出来,级联表做级联查询。
    各个数据的查询语句略有不同,储存布尔值或者其他的字段类型的方式也不完全一样,hibernate帮你把这些不一样进行统一化,你不用关注具体的数据库的sql,只需要关注hql,并且使得操作表数据结果集变成直接操作对象的结果集,比较方便。
    有人质疑hibernate的查询效率,其实撇开存储过程,单单查询表而言,效率几乎一样的。大数据量后才会有点差异。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • iteye_18916 2013-07-19 13:52
    关注

    先映射后搜索。效率更高一些。

    评论
  • diaozhanming 2013-07-19 19:39
    关注

    这个问题不需要思考,必须是sql从数据库中查出来,然后映射成对象。Hibernate在扫描entity的时候,按照其中的配置,将这写信息都保存在database metadata中,然后当你查询的时候,根绝hsql生成sql,查询。回来数据之后,更根据metadata生成对象。

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 act_ge_bytearray的草稿json数据复制到act_de_model 的model_editor_json的脚本
  • ¥15 cvi使用CreateThread创建线程时,出现存储空间不足无法处理此命令的错误
  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件