首页>参考读物>计算机科学与技术>软件与程序设计

EJB 3.0 专家编程
作者 : Mike Keith; Merrick Schincariol
译者 : 赵睿 赵俊明
丛书名 : 华章程序员书库
出版日期 : 2007-11-07
ISBN : 7-111-22489-1
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 372
开本 : 16开
原书名 : Pro EJB 3 Java Persistence API
原出版社: Apress
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

亲爱的读者:
  当致力于EJB 3.0的持久化部分时,专家组的任务是使它更容易使用。但是为了完全实现一个持久化API应该提供的简单性与功能,我们需要从传统的实体Bean方法出发,利用现有的轻量级持久化解决方案。这些解决方案已经被广泛采用,而且已经证实它们在企业应用当中是十分成功的。
  Java Persistence API是一个新标准,用于Java企业版(Java EE)平台内的持久化。它把当今使用的大多数受欢迎产品的各种特征和最佳实践集合在一起,其中包括Hibernate、TopLink和基于JDO的解决方案。它把实体建立为轻量级的持久化对象,并且为了能够与实体合作,标准化了对象关系映射、可移植的查询语言以及EntityManager API。
  这个API的需求被定义在规范中,但是它的目的不是提供实际上怎么使用它。我们写这本书是为了给初学者和有经验的开发人员提供一本简明实用的Java Persistence API的学习和使用指南。我们涵盖了在Java EE和Java SE中使用这个API时需要知道的所有内容,包括如何在这两个环境中设计、建立和部署应用。
  这个API易于学习,使用起来直观,但是不要小看它。它与Java EE环境的集成使它成为名副其实的企业技术。当你开始学习它,并开始使用本书中讲到的技术时你就会发现,持久化开发原来也可以如此简单!

图书特色

图书前言

JPA(Java Persistence API,Java持久化应用程序接口)宣称即将推出已经有一段时间了,甚至有些人会说它已经过时了。基于“POJO”开发模型的企业Java持久化标准的到来,填补了平台中早就应该被填补的一个空白。以前的尝试都忘了这一标记,反而鼓吹对于开发来说很笨拙的、且对于很多应用程序来说都太沉重的EJB实体Bean。它从来没有达到被业内许多部门广泛采用或普遍认可的程度。但是在缺乏标准的情况下,像JBoss Hibernate和Oracle TopLink这样的私有持久化产品在业内得以普及,而且已经取得成功。随着JPA的出现,现在,开发人员能够创建可移植的持久化代码,这些代码将能够运行在任何适应Java EE 5的服务器上,以及服务器以外独立的JVM中。
  已经可以证实,等到持久化市场成熟起来以后,出现的高级标准是以产品和用户经验为基础的,而不是以理论和设计为基础。JPA中所包含的是所有持久化行家们根据对现有产品的经验而公认的基本概念和接口。这更容易使已经在使用这些产品的人们选择采用JPA,使初学持久化的开发人员选择学习这个API,并快速地学会它。
  已经有为架构师和开发人员撰写的规范,但是它终究是个规范。很少有人愿意坐下来一字一句地去读规范来学会如何使用API。它并不探究应用这个API的复杂性,也不解释在开发过程中可能会碰到的任何外围问题。在这本书中,我们希望为这个主题提供更加实用的方法, 并突出使用一些我们认为有价值的模式。
  我们的本来想法是围绕整个EJB 3.0规范来写。同时我们也打算让这本书完成后能够适合放在笔记本电脑包中而不要过重。很快我们就意识到,为了能够提供足够的主题范围,编写一本对于一般的开发人员有意义的书,只需要把注意力集中在半个规范上即可。假设我们缺乏JPA以外的现有知识,那么就很容易做出选择了。
这本书从头到尾将会详细阐述这个API的所有要素。我们会解释概念,并举例说明如何在应用程序中应用它们。我们首先通过在Java SE环境中创建一个非常简单的应用程序,来快速浏览这个API。然后,提供EJB 3.0和Java EE 5标准中适用于企业应用的持久化特性的概述。
  对象关系映射处于关系数据库中存储对象状态的中心,我们详细阐述了这个API支持的ORM技术,以及映射和特征。EntityManager是用来与实体交互的主要接口。我们探索了使用实体管理器的不同方面,揭示了它的内部实现,以帮助你理解一些重要的细微差别。我们还探索了从实体管理器中可以获得的查询,在各种可以获得的动态、静态或命名查询之间进行区分。评价了查询能力,它们是可以访问的,并介绍了关于在什么时候应该使用哪种查询。我们全面讨论了Java持久化查询语言(Java Persistence Query Language, JPQL),并举例说明它的所有特征。
  接下来,我们讨论了一些关于ORM的中级和高级主题,例如继承,并且演示了如何将各种类层级结构与各种数据模式进行映射。我们还深入研究了锁定这个重要的主题,并解释了如何在应用程序中最好地使用锁定策略。对于那些因为元数据而喜欢用XML的人,我们描述了XML映射是如何指定的,并解释了它们如何能够用来覆盖注解。然后,通过讨论如何在不同的企业应用组件中配置和打包持久化单元,结束开发的生命周期。
  关于测试已经出了很多书,而且仍然继续在出这方面的书。这个API的另一个优势是,它支持单元测试和一些当前正在使用的其他现行测试方法和模式的能力。我们花一些时间讨论了可以用来测试实体和调用它们的应用逻辑的一些方法,包括应用服务器内部调用逻辑和外部调用逻辑。
  最后,对于那些打算从现有的持久化系统改用这个API的人,我们用了一些时间来研究移植问题。关于为了使用JPA而移植不同架构应用程序的方法,我们通过使用一些通用的设计模式,提供了一些建议。
  我们希望你能喜欢这本书,并学会怎样使用JPA。我们不可能在这本书中涵盖所有内容,但是希望能像Indiana Jones所说,我们“明智地选择了”内容。欢迎读者对本书提出任何建议或意见。
  本书为谁而写
  我们为想要在企业和桌面应用程序中使用持久化的任何开发人员编写本书。我们假设你没有任何持久化产品的经验,但是你要有一些Java编程经验,并了解J2EE平台。新的Java EE 5标准的经验可能会有所帮助,但当然不是必需的。也不需要EJB以前版本的相关知识。
  要学习在关系数据库中映射对象并存储数据的持久化API,需要对数据库和SQL有一些基本了解。另外,因为这个API是在访问数据的 JDBC(Java Database Connectivity,Java数据库连接)API基础上实现的,所以JDBC API的任何相关知识也都是很有用的,但绝对不是必需的。
  关于代码示例
  有时,一段代码比大段文字更有价值。我们尝试使用更实用或更能够满足目的的内嵌代码作为示例。虽然我们更愿意从代码中学习,而不是去读大段的文字,但是我们发现,当一页一页读示例代码的时候,直到代码的结尾,可能已经忘了想从这段代码中学些什么。我们通过使用省略号省略例子中没有必要的部分,努力减少无关代码对阅读的影响。我们希望你能理解这样做使例子更有意义,而不会认为它们不完整。
  关于持久状态的访问调节器,在一定程度上这个API是灵活的,因为它可以是包范围的、保护的或是私有的。我们定义了实体状态在示例中一贯是私有的,来强调状态应该怎样封装在实体中。对于记录,我们不会武断地认为其状态就是私有的。我们只是碰巧用这种方法开始,并且始终没有要修改它的烦恼。
  为了保证集中精力理解技术,而不必苦苦思考样例域,我们采用尽可能最简单的、最流行的域模型—真实可靠的Employee模型。然而我们不得不承认,它无所不在,以至于我们可以打赌实际上这个星球上的每个开发人员都理解它并且都涉及到它。它包含所有模型化可变性(无可否认,尽管我们的确必须在某些情况下扩展它),而这正是举例说明这个API的概念和实践所必需的。
  本书中的例子已经用Java EE 5应用服务器和JPA的官方参考实现(Reference Implementation,RI)实现了。Java EE 5 RI叫做“Glassfish”,它是在共同开发和分发许可(Common Development and Distribute License,CDDL)下能够获得并使用的完全公开的开源应用服务器。用于JPA的RI叫做“TopLink Essentials”,它是从商业的分布式Oracle TopLink企业数据集成栈中衍生出来的产品,它是开源的,并且可以免费获得。Glassfish和TopLink Essentials可以从java.net的Glassfish产品下载链接上获得,但是我们推荐你去持久化页面下载,其网址为http://glassfish.dev.java.net/javaee5/persistence。TopLink Essentials还可以从Oracle Technology Network上的TopLink页面获得,其网址为http://www. oracle.com/ technology/ products/ias/toplink。
  可以从Apress网站上下载得到这些例子,其网址为http://www.apress.com。我们建议下载并在那里浏览。学习这个API的最好方法就是你自己亲自试用。采用现有的模型,并将它与例子结合是开始学习的非常好的方法。这个API本身就是最好的卖点。一旦用它进行开发,你将会发现持久化开发比以前的开发要容易得多!
  联系方式
  可以通过michael.keith@oracle.com和merrick.schincariol@oracle.com联系我们。
  致谢
  我想要感谢为EJB 3.0规范做出贡献的所有专家组成员。大量的电话会议,无数小时在电话中与Linda、Gavin、Patrick和其他人,以及数以千记的email得出的结果,我们希望它对于这两年来我们为之付出的时间来说是值得的。
  我想要感谢4位D(Dennis Leung、Dan Lesage、Doug Clarke和Donald Smith),他们在这本书的各个阶段提供了支持和友谊。感谢Shahid对早期各章节草稿的审阅,以及许多其他临时审阅人员对不固定章节的审阅。我特别应该感谢3位伟大的朋友:Jason,因为他孜孜不倦地将所有示例变成代码(同时修改我的bug!),审阅,甚至还编写早期章节的部分草稿;Huyen,因为他远超过职责的、对稿件夜以继日地进行审阅,以满足这样紧的进度要求;当然还有Merrick,在我无法完成任务或者不能继续的时候,他能够与我合作并使我再次振奋。Apress的Tony、Julie、Hastings和Laura一直提供帮助,并且奇迹般地使本书得以出版。最后,也是最重要的,感谢我的妻子Darleen和我的孩子们Cierra、Ariana、Jeremy和Emma。我对他们的爱永无止境。是他们为这本书做出了最大的牺牲,他们耐心等待了好几个月,期间他们只看到一个疏远的丈夫和父亲,整天懒散地坐着并不断在笔记本电脑上敲着。
  Mike Keith
  写一本书所涉及的人远比列在这里的人名要多得多。在去年整整一年中,我一直被保佑着,所以能够得到如此多的人支持,他们提供建议、审查我的工作并且一直不断地鼓励我。最首要的,我要感谢Mike,给我提供了与他合作编写这本书的机会,从始至终一直都是一种真正的伙伴关系。但是,如果没有我的妻子Natalie爱的支持,以及我年幼的儿子Anthony不平凡的耐心—他不得不容忍他的父亲常常躲在办公室里不停地写,这是不可能完成的。在Oracle,我要特别感谢Jason Haley,他在我工作于这个项目的时候,担负了远多于他自己的资深工程方面的责任,也感谢Dennis Leung、Rob Campbell和全部EJB容器团队的支持。在Apress方面,Julie Smith、Hastings Hart和Laura Esterman帮助度过了让事情按期完成的所有难关。最后,感谢很多审阅过这本书草稿的审阅者们。特别是Huyen Nguyen和Jason Haley帮助我们提高质量,使这本书更为精确和更具可读性。
  Merrick Schincariol

封底文字

亲爱的读者: 当致力于EJB 3.0的持久化部分时,专家组的任务是使它更容易使用。但是为了完全实现一个持久化API应该提供的简单性与功能,我们需要从传统的实体Bean方法出发,利用现有的轻量级持久化解决方案。这些解决方案已经被广泛采用,而且已经证实它们在企业应用当中是十分成功的。 Java Persistence API是一个新标准,用于Java企业版(Java EE)平台内的持久化。它把当今使用的大多数受欢迎产品的各种特征和最佳实践集合在一起,其中包括Hibernate、TopLink和基于JDO的解决方案。它把实体建立为轻量级的持久化对象,并且为了能够与实体合作,标准化了对象关系映射、可移植的查询语言以及EntityManager API。 这个API的需求被定义在规范中,但是它的目的不是提供实际上怎么使用它。我们写这本书是为了给初学者和有经验的开发人员提供一本简明实用的Java Persistence API的学习和使用指南。我们涵盖了在Java EE和Java SE中使用这个API时需要知道的所有内容,包括如何在这两个环境中设计、建立和部署应用。 这个API易于学习,使用起来直观,但是不要小看它。它与Java EE环境的集成使它成为名副其实的企业技术。当你开始学习它,并开始使用本书中讲到的技术时你就会发现,持久化开发原来也可以如此简单!

图书序言

我相信JPA(Java Persistence API,Java持久化API)是Java EE 5平台修订版中最重要的提升特性。它为ORM(Object-Relational Mapping,对象关系映射)提供了简单而强有力的标准。它领导持久化供应商联合起来,一起开发它,同时也使开发人员可以联合起来一起采用它。
  直到EJB2.1,也包括EJB 2.1,持久化技术(实体Bean)是整个EJB规范里的最薄弱环节—既复杂又缺少一些重要的能力,例如继承建模,并且独立时不可使用。JPA现在是一个很好的模型,可以独立并应用于一定范围的环境中。在未来的更新版本中,JPA独立于它的运行时环境的能力可能是确定的,JPA会从EJB中分离出来,成为独立的规范。因此JPA与操作关系型数据库的所有Java开发人员息息相关,而不仅是那些完全使用EJB组件模型的人。
  从2001年EJB 2.0的发布到现在,企业型Java向一个更为简单化的方向变革—基于POJO的编程模型。这一转换相当于在简单Web应用开发人员的财富500强中奠定了它的地位。持续关注的焦点是在Java语言上,而不是复杂的容器合同上。现代基础结构可以将企业服务应用到POJO上,而不会使它们的需求沾染上基础结构。
  不像以前的实体Bean模型,JPA提供了持久化POJO的能力。JPA规范从跨越诸如TopLink、Kodo和Hibernate这类产品超过十年的集体经验中抽取而成。基于POJO的持久化提供了许多重要的优点,这些优点是之前的企业Bean模型所缺少的:简单、富有成效的开发体验,易于测试,以及构建和持久化捕获业务概念的真实域模型的能力。POJO持久化的崛起,将会逐渐地帮助我们更好地设计应用程序,在采用J2EE开发的传统过程风格的地方,更大地发挥面向对象的作用。
  当然,ORM并不是一个新概念,很多开发人员已经成功地使用一些ORM产品工作了好多年。JPA的重要性在于,它将各个实现提供给用户选择,而不需要使他们屈从于一个最小公分母(译者注:意指所有产品的一个大杂烩)。所有处于领导地位的ORM产品都将会支持JPA,并附带有它们各自的专有API(或者其他标准,例如JDO)。在将来,选择转向JPA API的用户将不会被强迫更换持久化产品,但是却能够获取更大的灵活性。
  作为开源项目Spring Framework的领导者,我尤其高兴,因为处于领导地位的JPA实现也完全是开源的。Spring Framework 2.0发布版本与JPA集成在一起,并且我们可以提供帮助,使Spring的用户更容易在任何环境中使用它。我们很激动,因为我们工作在开源JPA实现的社区中,这样有助于让Spring/JPA的体验越来越好。
  因此这是一个重要的主题。希望你觉得应该读一本关于JPA的书,但是为什么应该读这一本呢?
  Mike Keith绝对够资格来写这样一本书。他同时也是EJB 3.0规范的共同领导者,不仅因为他对规范的相关知识十分熟悉,还因为他在完成规范的过程中扮演了至关重要的角色。他在持久化引擎方面的经验要追溯到15年前。他还曾经在TopLink团队中作为一个关键成员工作了5年,在J2EE 1.3和1.4持久化的黑暗年代里,在被称为POJO的持久化技术变得流行起来之前,TopLink一直是业界的冠军产品。
  最重要的是,Mike和Merrick Schincariol已经将他们的经验转换成一部清晰的、极具可读性的书,提供了对JPA的完整介绍。而且你一定不会失望,因为你增加了在JPA方面的经验,并且在你寻找关于高级问题和最佳实践的有价值内容时,这本书绝不会让你觉得陷入到太过深入的困境中。作者将你如何能够有效地使用JPA这个大的场景清晰地传达给你。许多代码示例确保讨论能够切合实际,而且采用的是直接与开发人员相关的示例。
  我建议读这本书,并且我相信你将会与我一样,对这本书有很高的评价。
  Rod Johnson
  Spring框架之父
  Interface21公司CEO

作者简介

Mike Keith; Merrick Schincariol:Mike Keith: Mike Keith EJB 3.0的联合规范领导者,并且是Java EE 5专家组的一名成员。他获得卡尔顿大学(Carleton University)的计算机科学硕士学位,并在对象持久化方面有15年的执教、研究和实践经验。他曾为财富100强企业在很多技术中实现过持久化系统,包括关系型和对象型数据库、XML、路径服务和自定义数据格式。目前他受雇于Oracle公司,作为一名持久化架构师。
Merrick Schincariol: Merrick Schincariol Oracle公司的资深工程师,并且是EJB 3.0规范的一名审核人员。他获得加拿大湖首大学(Lakehead University)的计算机科学学士学位,在业界有超过七年的实践经验,有大规模系统和数据仓库设计经验,多年从事EJB容器的实现工作。他现在是Oracle公司的EJB 3.0产品的领队工程师之一。

译者简介

赵睿 赵俊明:暂无简介

译者序

Java Persistence API的发布,可能是最近几年来能让我为技术的进步感到兴奋的少有的几件事之一。作为一名体验过EJB之前多个版本、也在多种对象关系映射技术中挣扎过很久的开发人员,JPA的发布确实使我感到兴奋,同时心里产生跃跃欲试的感觉。我很荣幸能够成为这本书的译者,因为之前已经久仰过Mike Keith的大名,也拜读过他的文章聆听过他的演讲,所以知道他是一名注重实干的人,他的书质量肯定不低。
  本书作为一本针对规范的书,并不是简单地与规范对应,罗列各种策略和术语,而是深入浅出地介绍规范中的技术要点,阐述其应用的上下文和已知的最佳实践,并提供精选的示例和图解,对那些最常用或最经典的场景进行示范,并比较各种手段、方式的优劣。
  保持作者的原有风格、最大限度将作者的语气和情感体现在译作中,是我们的宗旨,但是为了符合国内读者的习惯,帮助读者能够更好地理解文中的内容,我们将一些隐喻或用语做了适当的调整(或者添加少量的译注)。在用词上我们尽量以简单、通用的词句为主,但是限于这是一本针对规范的著作,免不了要包含很多的术语或者业内用语。因此,希望读者能够在阅读时与规范相比较,并行阅读,以增强对其中内容的了解。另外,JPA作为一个规范,始终不能脱离其空中阁楼的地位,希望大家在阅读的时候,能够针对所熟悉的其中一种(或多种)持久化容器,将书中的实例在真实环境中运行一下,这样不仅能增强对规范的理解,同时也能对书中提到的不同持久化提供商的差异有所了解,在今后的工作中能够很好地运用规范。
  尽管译者对持久化相关的技术和背景知识有较深了解,并具备多年的实践经验,但是鉴于个人水平,以及有限的时间,翻译过程中难免有所疏漏和错误,请广大读者予以指正,在此深表谢意。
  参与本书翻译工作的有赵睿、赵俊明、窦巍、刘春霞、黄庆昆、马丽霞、杨斯雯、赵北扬、刘卓、杨磊、张楠、张敏、陈红、赵斌,并由赵睿统一全稿。机械工业出版社华章分社的编辑对全书进行了细致的审校,提供了大量宝贵的修改意见和指导,在此一并致谢。

图书目录

译者序
序言
前言
关于作者
第1章 引言 1
1.1  Java对持久化的支持 1
1.1.1  JDBC 2
1.1.2  EJB 2
1.1.3  Java数据对象 3
1.2  为什么采用另一个标准 3
1.3  对象关系映射 4
1.4  Java Persistence API 9
1.4.1  规范的历史 10
1.4.2  概述 11
1.5  小结 12
第2章 入门 13
2.1 实体概述 13
2.1.1 可持久性 13
2.1.2 标识性 14
2.1.3 事务性 14
2.1.4 粒度 14
2.2 实体元数据 14
2.2.1 注解 15
2.2.2 XML 15
2.2.3 按异常配置 16
2.3 创建一个实体 16
2.4 实体管理器 18
2.4.1 获得实体管理器 19
2.4.2 持久化实体 20
2.4.3 发现实体 21
2.4.4 删除实体 22
2.4.5 更新实体 23
2.4.6 事务 23
2.4.7 查询 24
2.5 把上述步骤放在一起 25
2.6 打包 27
2.6.1 持久化单元 27
2.6.2 持久化归档 28
2.7 小结 28
第3章 企业级应用 30
3.1 应用组件模型 30
3.2 会话Bean 31
3.2.1 无状态会话Bean 32
3.2.2 状态会话Bean 34
3.3 消息驱动Bean 37
3.4 Servlet 38
3.5 依赖管理 40
3.5.1 依赖查找 40
3.5.2 依赖注入 42
3.5.3 声明依赖 43
3.6 事务管理 46
3.6.1  事务回顾 46
3.6.2  Java企业事务处理 47
3.7 使用Java EE组件 51
3.7.1 使用无状态会话Bean 51
3.7.2 使用有状态会话Bean 52
3.7.3 使用消息驱动Bean 53
3.7.4 增加实体管理器 54
3.8 综述 56
3.8.1 定义组件 56
3.8.2 定义用户接口 57
3.8.3 打包 58
3.9 小结 58
第4章 对象关系映射 60
4.1 持久化注解 60
4.2 访问实体状态 61
4.2.1 数据成员访问 61
4.2.2 成员属性访问 62
4.3 映射到表 62
4.4 映射简单类型 63
4.4.1 字段映射 64
4.4.2 延迟获取 65
4.4.3 大对象 66
4.4.4 枚举类型 67
4.4.5 时间类型 68
4.4.6 瞬时状态 69
4.5 映射主键 70
4.6 关系 74
4.6.1 关系的概念 74
4.6.2 映射概述 77
4.6.3 单值关联 77
4.6.4 集合值关联 83
4.6.5 延迟关系 90
4.7 小结 91
第5章 实体管理器 92
5.1 持久化上下文 92
5.2 实体管理器 92
5.2.1 容器管理的实体管理器 93
5.2.2 应用程序管理的实体管理器 97
5.3 事务管理 99
5.3.1 JTA事务管理 100
5.3.2 本地资源事务 108
5.3.3 事务回滚和实体状态 110
5.4 选择实体管理器 111
5.5 实体管理器操作 112
5.5.1 持久化一个实体 112
5.5.2 发现一个实体 113
5.5.3 删除一个实体 114
5.5.4 级联操作 115
5.5.5 清理持久化上下文 117
5.6 与数据库同步 118
5.7 脱管与合并 120
5.7.1 脱管 120
5.7.2 合并脱管实体 122
5.7.3 处理脱管实体 125
5.8 小结 137
第6章 使用查询 139
6.1 Java持久化QL 139
6.1.1 入门 140
6.1.2 过滤结果 140
6.1.3 投射结果 141
6.1.4 实体间连接 141
6.1.5 聚合查询 142
6.1.6 查询参数 142
6.2 定义查询 142
6.2.1 动态查询定义 143
6.2.2 命名查询定义 145
6.3 参数类型 146
6.4 执行查询 148
6.4.1 处理查询结果 149
6.4.2 查询分页 152
6.4.3 查询和未提交的改变 154
6.5 批量更新和删除 156
6.5.1 使用批量更新和删除 157
6.5.2 批量删除和关系 159
6.6 查询提示 160
6.7 查询最佳实践 160
6.7.1 命名查询 161
6.7.2 报表查询 161
6.7.3 查询提示 161
6.7.4 无状态会话Bean 162
6.7.5 批量更新和删除 162
6.7.6 提供者的区别 162
6.8 小结 162
第7章 查询语言 164
7.1 介绍 164
7.1.1 术语 164
7.1.2 样例数据模型 165
7.1.3 样例应用 166
7.2 选择查询 168
7.2.1 SELECT子句 169
7.2.2 FROM子句 171
7.2.3 WHERE子句 176
7.2.4 ORDER BY子句 183
7.3 聚合查询 183
7.3.1 聚合函数 184
7.3.2 GROUP BY子句 185
7.3.3 HAVING子句 186
7.4 更新查询 186
7.5 删除查询 187
7.6 小结 187
第8章 高级对象关系映射 188
8.1 嵌入式对象 188
8.2 复合主键 191
8.2.1 Id类 192
8.2.2 嵌入式Id类 193
8.3 高级映射元素 195
8.3.1 只读映射 195
8.3.2 可选性 196
8.4 高级关系 196
8.4.1 复合连接字段 197
8.4.2 包括一个关系的标识符 198
8.4.3 映射关系状态 200
8.5 多个表 202
8.6 继承 205
8.6.1 类层级结构 205
8.6.2 继承模型 209
8.6.3 混合继承 216
8.7 小结 218
第9章 高级主题 219
9.1 SQL查询 219
9.1.1 本地查询与JDBC 220
9.1.2 定义和执行SQL查询 221
9.1.3 SQL结果集映射 224
9.1.4 参数绑定 229
9.2 生命周期回调 229
9.2.1 生命周期事件 229
9.2.2 回调方法 230
9.2.3 实体监听器 232
9.2.4 继承和生命周期事件 234
9.3 并发性 239
9.3.1 实体操作 239
9.3.2 实体访问 239
9.4 刷新实体状态 239
9.5 锁定 242
9.5.1 乐观锁定 242
9.5.2 版本 243
9.5.3 额外的锁定策略 244
9.5.4 从乐观失败中恢复 249
9.6 模式生成 251
9.6.1 唯一性约束 252
9.6.2 空值约束 253
9.6.3 基于字符串的字段 253
9.6.4 浮点字段 254
9.6.5 定义字段 254
9.7 小结 255
第10章 XML映射文件 256
10.1 元数据之谜 256
10.2 映射文件 257
10.2.1 禁用注解 258
10.2.2 持久化单元默认值 259
10.2.3 映射文件默认值 262
10.2.4 查询和生成器 264
10.2.5 托管类和映射 268
10.3 小结 286
第11章 打包和部署 287
11.1 配置持久化单元 287
11.1.1 持久化单元名 287
11.1.2 事务类型 288
11.1.3 持久化提供者 288
11.1.4 数据源 289
11.1.5 映射文件 290
11.1.6 托管类 291
11.1.7 增加供应商属性 293
11.2 编译和部署 293
11.2.1 部署classpath 293
11.2.2 打包选项 294
11.2.3 持久化单元范围 298
11.3 在服务器之外 299
11.3.1 配置持久化单元 299
11.3.2 在运行时指定属性 301
11.3.3 系统classpath 301
11.4 小结 301
第12章 测试 303
12.1 测试企业应用 303
12.1.1 术语 304
12.1.2 在服务器之外测试 304
12.1.3 测试框架 306
12.2 单元测试 306
12.2.1 测试实体 306
12.2.2 测试组件中的实体 308
12.2.3 单元测试中的实体管理器 309
12.3 集成测试 313
12.3.1 使用实体管理器 313
12.3.2 组件和持久化 318
12.4 最佳实践 329
12.5 小结 330
第13章 移植 331
13.1 从CMP实体Bean移植 331
13.1.1 定位挑战 331
13.1.2 实体Bean转换 332
13.2 从JDBC移植 341
13.3 从其他ORM解决方案移植 342
13.4 利用设计模式 342
13.4.1 传输对象 342
13.4.2 会话外观 345
13.4.3 数据访问对象 347
13.4.4 业务对象 351
13.4.5 快速道读取器 352
13.4.6 活动记录 352
13.5 小结 353
附录 快速参考 354

教学资源推荐
作者: 王珊珊 臧洌 张志航 编著
作者: 秦维佳 侯春光 孟艳红 伞宏力
作者: 苏小红 孙承杰 李东 等编著
参考读物推荐
作者: 常国珍 赵仁乾 张秋剑 著
作者: Damon Hougland Aaron Tavistock
作者: (俄)Antony Polukhin 著