关于本书
在这本书中,我们首先介绍了对象/关系范例的不匹配,目的是为了给你对这个耗费时间的问题上有一个总体的概略。你接着将学习怎样使用Hibernate作为持续层来构建一个单独的,持续性的应用程序案例。这个持续层的实现包括了所有实体的关联,类继承,以及特殊类型的映射策略。
我们将教你在一个高并发多用户的应用程序中,怎样使用Hibernate 对象查询与事务处理来获得最好的性能。在本书中,灵活的Hibernate二重缓存技术也是一个重要的议题。我们将讨论在不同的应用环境下Hibernate的集成以及向你展示在两层或三层Java数据库应用系统中典型的架构问题。如果你不得不与现存的SQL数据库打交道,你将会对Hibernate的传统数据库特性与Hibernate的开发工具集感兴趣的。
组织结构
第一章定义了对象的持续化。我们将讨论在今天的应用程序中,为什么带有SQL接口的关系数据库作为数据持续化的主要手段,以及为什么使用“硬编码”的JDBC与SQL的持续层是耗费时间和容易出错。在给出这个问题的各自的解决方案之后,我们将介绍对象/关系映射以及讨论这项技术的优势与不利的地方。
第二章给出了Hibernate的架构总体概括。我们将向你展示Hibernate中最重要的应用程序编程接口。在看过简单的“Hello world”程序之后,我们将示范在J2EE和J2SE中的Hibernate的配置过程。
第三章引进了一个应用程序例子,各种映射到数据库模式的实体关系,包括单向和双向的关联,类继承以及类聚合。你将会学到怎样写Hibernate映射文件和怎样设计持续化类。
第四章教你怎样使用Hibernate的读取和保存对象操作的接口。同时我们将向你展示怎样在Hibernate中使用可迁移(transitive)的持续化技术。这一章主要关注于在Hibernate中怎样以最有效率的方法来存取对象。
第五章讨论在长期运行的数据库应用程序的事务中,并发数据访问。我们将引进数据版本(versioning)与锁(locking)的概念,同时也涉及到与并发数据访问密切相关的缓存技术与Hibernate的缓存技术。
第六章介绍Hibernate的映射技术。包括许多高级的映射概念。如自定义用户类型,值集合和一对多或多对多的映射关联。我们也将简要地讨论Hibernate的完全的多态特性。
第七章引进Hibernate查询语言(HQL)和其他对象恢复方法,如使用QBC(一种描述对象查询的方法)我们将向你展示怎样在你应用程序中将复杂的搜索过程转化成简单的QBE查询。通过将它们的三个特性结合起来,你将能感受到Hibernate强大的查询功能。我们同样也向你示范在特殊的情况下怎样直接使用SQL语句以及怎样得到最优化的查询性能。
第八章描述Hibernate应用程序的一些基本操作。包括SessionFactory的使用,最流行的ThreadLocal Session模式以及在数据访问对象(DAO)和J2EE中,持续层功能的封装。我们将向你展示怎样设计长期运行的应用程序事务以及怎样在Hibernate中使用革新的分离对象支持。我们也将讨论审计与日志记录以及传统数据库的模式。
第九章介绍了几种可用在不同的场合的开发工具与方式,我们也向你展示使用不同方式的一般技术缺陷。接着讨论一下Hibernate工具集,如hbm2ddl,hbm2java以及与最流行的开源工具的集成,如XDoclet,Middlegen。
谁应该读这本书?
这本书的读者应该有面向对象软件开发的基本知识,以及在实践有所应用。为了理解本书中例子,你还必须对Java语言以及统一建模语言(UML)熟悉。
这本书面向的读者主要是由基于SQL数据库系统的Java开发人员组成的。同时我们也向你展示怎样使用ORM技术来真正的提高你的生产率。
如果你是数据库开发者,这本书可以向你介绍面向对象软件开发的内容。
如果你是数据库管理员,你将会对ORM技术怎样影响应用程序的性能感兴趣,以及对怎样调整SQL数据库管理系统或者持续层来达到提高性能的目标感兴趣。既然在大多数Java应用程序中,数据访问是一个瓶颈,这本书对性能方面的问题有所侧重。许多数据库管理员对于由工具生成的SQL代码存在性能方面的顾虑,我们寻找怎样减少这方面的顾虑,同时也指出在什么样的情况下不使用由工具生成的数据库访问代码。你将会发现我们认为ORM并不是所有的问题的最好解决方案。
代码转换与下载
这本书提供了丰富的例子,包括所有的Hibernate应用程序的各个部分:Java代码,Hibernate配置文件以及XML元数据映射文件。在本书中,代码已这样的格式与其他文字区别开来(like this)。在本书中Java方法的名字,组件参数,对象属性以及XML元素和属性也是用特定的格式。
Java,HTML,和XML通常是冗长的。在大多数情况下,源代码(在线可下)被重新格式化的。我们添加了换行符以满足本书页面的排版需求。在极少数情况下,我们还将源码的注释与标记从本书中移除。
在源码列表中,代码注释标示出重要的概念。
Hibernate是在GNU公共许可证下发布的开源项目。你可以在Hibernate的官方网站上下载源代码或二进制代码。网址:www.hibernate.org/
本书中的CaveatEmptor示例所有源代码可以从caveatemptor.hibernate.org上下载。在这个网站上,该示例有不同的版本,如针对servlet 或 EJB开发,是否带有持续层。但是在本书中主要涉及到带有持续层的源码包。
关于作者
Christian Bauer 是Hibernate开发组的成员之一同时也是Hibernate官方站点与文档的主要负责人。Christian对关系数据库系统以及Java应用程序中音频数据管理感兴趣。他现在住在德国的Frankfurt,在JBoss Inc.担任开发与顾问。
Gavin King是Hibernate项目的发起者以及担任该项目的开发组组长。他是热衷于敏捷开发与开源软件。作为EJB3专家组成员,他努力使ORM技术与J2EE标准集成。他现在住在澳大利亚的Melbourne,在JBoss Inc.担任开发与顾问。