返回介绍

第 8 章 条件查询

发布于 2025-04-21 21:42:13 字数 1172 浏览 0 评论 0 收藏

像 HQL(以及作为它的基础的 SQL)这样的关系型查询语言都非常灵活而且功能强大,但是如果要真正精通,也得花费很长的时间。很多应用程序开发人员对 SQL 只有基本的了解,只能根据以往的项目模仿些相似的示例,当碰上真正没有遇到过的或是非常难以理解的查询表达式时,才会寻求数据库专家的帮助。</p>

将查询语言的语法和 Java 代码混杂在一起,也很麻烦。第 3.4 节介绍了一种将所有查询语句单独放在另一个文件中,可以集中对它们进行查看和编辑,不需要使用 Java 字符串转义字符序列(escape sequence)和串联(concatenation)语法。不过,即使采用这种技巧,也是直到加载映射文档时才会解析 HQL 查询语句,也就是说,HQL 查询内容中隐藏的语法错误在应用程序运行以前都无法捕获。

Hibernate 采用条件查询的方法,为这些问题提供了一种不同寻常的解决方案。这种方法通过创建简单的 Java 对象,并把它们串连起来,将其作为过滤器来筛选出你想要的结果。你可以建立嵌套的、结构化的表达式。这种机制也可以让你只提供示例对象,以表明你想查找的内容是什么,同时还能控制哪些细节需要关注、哪些属性可以忽略。

从后面的介绍中可以看到,这种功能非常方便。但是坦率地讲,它也有自身的(非常次要的)缺点。把冗长的查询表达式转换成 Java API 会占用更多的内存空间,对于经验丰富的数据库开发人员而言,他们对条件查询不像对类 SQL(SQL-like)查询语言那么熟悉。有些东西你无法用以前的条件查询 API 来加以表达,诸如投影(从一个类的多个属性中取出子集,例如"select title, id from com.oreilly.hh.Track",而不是"select*from com.oreilly.hh.Track")和聚合(aggregation)(对查询结果做统计总结,例如获取某个属性的总和、平均值以及总数)。这种非常严重的不足,在编写本书第 1 版时 API 就存在,不过,在 Hibernate 3 中已经得到了解决。我们会向你介绍现在应该怎么实现这些条件查询。下一章还会演示如何使用 Hibernate 的面向对象的查询语言(HQL)来完成此类任务。

不论使用哪一种 Hibernate 的方法来表达查询,最终都会生成特定数据库的 SQL 语句,由 SQL 来实现查询目的。所幸,你不会看到这些底层细节,但是,如果你对这些细节感兴趣的话,可以使用 Hibernate 配置文件的 show_sql 属性打开 SQL 日志输出(如例 3-1 所示),或是在 Eclipse 中使用交互式的 SQL 查询预览(将在第 11 章介绍)。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。