博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hql select from与from 的区别
阅读量:7126 次
发布时间:2019-06-28

本文共 976 字,大约阅读时间需要 3 分钟。

  hot3.png

from Customer c inner join c.orders o group by c.age;

select c.ID,c.name,c.age,o.ID,o.order_number,o.customer_ID from Customer c inner join c.orders c group by c.age;

这两条语句使用了HQL语句的内连接查询(我们将在HQL语句的连接查询部分专门讨论),现在我们可以看出这两条查询语句最后所返回的结果是一样的,但是它们其实是有明显区别的,语句(1)检索的结果会返回 Customer与Order持久化对象,而且它们会被置于Hibernate的Session缓存之中,并且Session会负责它们在缓存中的唯一性以及与后台数据库数据的同步,只有事务提交后它们才会从缓存中被清除;而语句(2)返回的是关系数据而并非是持久化对象,因此它们不会占用 Hibernate的Session缓存,只要在检索之后应用程序不在访问它们,它们所占用的内存就有可能被JVM的垃圾回收器回收,而且 Hibernate不会同步对它们的修改。

  在我们的系统开发中,尤其是Mis系统,不可避免的要进行统计查询的开发,这类功能有两个特点:第一数据量大;第二一般情况下都是只读操作而不会涉及到对统计数据进行修改,那么如果采用第一种查询方式,必然会导致大量持久化对象位于Hibernate的Session缓存中,而且 Hibernate的Session缓存还要负责它们与数据库数据的同步。而如果采用第二种查询方式,显然就会提高查询性能,因为不需要 Hibernate的Session缓存的管理开销,而且只要应用程序不在使用这些数据,它们所占用的内存空间就会被回收释放。

  因此在开发统计查询系统时,尽量使用通过select语句写出需要查询的属性的方式来返回关系数据,而避免使用第一种查询方式返回持久化对象(这种方式是在有修改需求时使用比较适合),这样可以提高运行效率并且减少内存消耗。㊣真正的高手并不是精通一切,而是精通在合适的场合使用合适的手段。

数据库量大时不用用“in”,否则速度超慢,而应该用left join之类的替换

转载于:https://my.oschina.net/fanqie/blog/56507

你可能感兴趣的文章
多SWITCH-CASE结构时的C语言对象方式化解
查看>>
算法学习笔记二---如何进行算法分析&渐近符号介绍
查看>>
ELK日志分析平台搭建全过程
查看>>
探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类
查看>>
OFBiz + Opentaps 目录管理 二. 网上商店
查看>>
Qt Tips:QString与中文,QString与std::wstring的相互转换
查看>>
wordpress第三方主题开启文章形式
查看>>
《Spring Boot系列》- 多数据源配置(JdbcTemplate)
查看>>
MySQL的MyISAM InnoDB区别简单笔记!
查看>>
SaaS应用增长数目繁多选择时须看利弊
查看>>
poj 2352 stars
查看>>
什么是密码缓存
查看>>
前端图片延迟加载详细讲解
查看>>
(转)JDBC、JTA、Spring的事务管理
查看>>
Motan RPC 服务治理
查看>>
自定义UITabBarController
查看>>
有奖“晒最喜欢的安全狗功能”活动 正在火热进行中
查看>>
Android 开发规范(完结版)
查看>>
解决android studio引用远程仓库下载慢(JCenter下载慢)
查看>>
IOS 提交审核,Missing Push Notification Entitlement
查看>>