2.1.2
Table of Contents
前言 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. 持久化对象标识(Persistent Object Identity ) 2.3. JMX集成 2.4. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式 3.2. 获取SessionFactory 3.3. 用户自行提供JDBC连接 3.4. Hibernate提供的JDBC连接 3.5. 其它配置属性 3.5.1. SQL Dialects SQL 方言 3.5.2. 外连接抓取(Outer Join Fetching ) 3.5.3. 二进制流 3.5.4. 在控制台记录SQL 3.5.5. 自定义 ConnectionProvider 3.5.6. 常用数据库属性 3.5.7. 自定义CacheProvider 3.5.8. 事务策略 3.5.9. 绑定SessionFactory到JNDI 3.5.10. 查询语言替换 3.6. XML配置文件 3.7. Logging 3.8. NamingStrategy(命名策略) 4. 持久化类(Persistent Classes) 4.1. 简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 建议使用不是final的类 (可选) 4.2. 继承(Inheritance ) 4.3. 持久化生命周期(Lifecycle)中的回调(Callbacks) 4.4. 合法性检查(Validatable) 4.5. XDoclet示例 5. O/R Mapping基础 5.1. 映射声明(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.4.1. generator 5.1.4.2. 高/低位算法(Hi/Lo Algorithm) 5.1.4.3. UUID算法(UUID Algorithm ) 5.1.4.4. 标识字段和序列(Identity Columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.5. composite-id 联合ID 5.1.6. 识别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. 时间戳(timestamp )(可选) 5.1.9. property 5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 组件(component), 动态组件(dynamic-component) 5.1.13. 子类(subclass) 5.1.14. 连接的子类(joined-subclass) 5.1.15. map, set, list, bag 5.1.16. 引用(import) 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 持久化枚举(Persistent enum)类型 5.2.4. 自定义值类型 5.2.5. 映射到"任意"(any)类型 5.3. SQL中引号包围的标识符 5.4. 自定义DDL 5.5. 映射文件的模块化(Modular mapping files) 6. 集合类(Collections) 6.1. 持久化集合类(Persistent Collections) 6.2. 映射集合(Mapping a Collection) 6.3. 值集合和多对多关联(Collections of Values and Many To Many Associations) 6.4. 一对多关联(One To Many Associations) 6.5. 延迟初始化(延迟加载)(Lazy Initialization) 6.6. 集合排序(Sorted Collections) 6.7. 对collection排序的其他方法(Other Ways To Sort a Collection) 6.8. 垃圾收集(Garbage Collection) 6.9. 双向关联(Bidirectional Associations) 6.10. 三重关联(Ternary Associations) 6.11. 异类关联(Heterogeneous Associations) 6.12. 集合例子(Collection Example) 6.13. <idbag> 7. 组件(Components) 7.1. 作为依赖的对象(As Dependent Objects) 7.2. In Collections 7.3. 作为一个Map的索引(As a Map Index ) 7.4. 作为联合标识符(As Composite Identifiers) 7.5. 动态组件 (Dynamic components) 8. 操作持久化数据(Manipulating Persistent Data) 8.1. 创建一个持久化对象 8.2. 装载对象 8.3. Querying 8.3.1. 标量查询(Scalar query) 8.3.2. 查询接口(Query interface) 8.3.3. 可滚动迭代(Scrollable iteration) 8.3.4. 过滤集合类(Filtering collections) 8.3.5. 条件查询 8.3.6. 使用本地SQL的查询 8.4. 更改在当前session中保存或者装载的对象 8.5. 更改在以前session中保存或者装载的对象 8.6. 把在先前的session中保存或装载的对象重新与新session建立关联(reassociate) 8.7. 删除持久化对象 8.8. 对象图(Graphs of objects) 8.8.1. 自动管理生命周期的对象(lifecycle object) 8.8.2. 通过可触及性决定持久化(Persistence by Reachability) 8.9. 清洗(Flushing) -- 这个词很难翻译,不能使用“刷新”,因为刷新一词已经被"refresh"使用了。有什么好的建议? 8.10. 结束一个Session 8.10.1. 清洗(Flush)session 8.10.2. 提交事务 8.10.3. 关闭session 8.10.4. 处理异常 8.11. 拦截器(Interceptors) 8.12. 元数据(Metadata) API 9. 父子关系(Parent Child Relationships) 9.1. 关于collections 9.2. 双向的一对多关系(Bidirectional one to many) 9.3. 级联(Cascades) 9.4. 级联更新(Using cascading update()) 9.5. 结论 10. Hibernate查询语言(Query Language), 即HQL 10.1. 大小写敏感性(Case Sensitivity) 10.2. from 子句 10.3. 联合(Associations)和连接(joins) 10.4. select子句 10.5. 统计函数(Aggregate functions) 10.6. 多态(polymorphism) 10.7. where子句 10.8. 表达式(Expressions) 10.9. order by 子句 10.10. group by 子句 10.11. 子查询 10.12. 示例 10.13. 提示和技巧(Tips & Tricks) 11. 实例(A Worked Example) 11.1. 持久化类 11.2. Hibernate 映射 11.3. Hibernate 代码 12. 性能提升(Improving Performance) 12.1. 用于延迟装载的代理 12.2. 第二层缓存(The Second Level Cache)s 12.2.1. 映射(Mapping) 12.2.2. 只读缓存 12.2.3. 读/写缓存 12.2.4. 不严格的读/写缓存 12.2.5. 事务缓存(transactional) 12.3. 管理Session缓存 12.4. 查询缓存(Query Cache) 13. 理解集合类的性能(Understanding Collection Performance) 13.1. 分类(Taxonomy) 13.2. Lists, maps 和sets用于更新效率最高 13.3. Bag和list是反向集合类中效率最高的 13.4. 一次性删除(One shot delete) 14. 条件查询(Criteria Query) 14.1. 创建一个Criteria实例 14.2. 缩小结果集范围 14.3. 对结果排序 14.4. 关联(Associations) 14.5. 动态关联对象获取(Dynamic association fetching) 14.6. 根据示例查询(Example queries) 15. SQL查询 15.1. 创建一个基于SQL的Query 15.2. 别名和属性引用 15.3. 为SQL查询命名 16. 继承映射(Inheritance Mappings) 16.1. 三种策略 16.2. 限制 17. 事务和并行(Transactions And Concurrency) 17.1. 配置,会话和工厂(Configurations, Sessions and Factories) 17.2. 线程和连接(Threads and connections) 17.3. 乐观锁定/版本化(Optimistic Locking / Versioning) 17.3.1. 使用长生命周期带有自动版本化的会话 17.3.2. 使用带有自动版本化的多个会话 17.3.3. 应用程序自己进行版本检查 17.4. 会话断开连接(Session disconnection) 17.5. 悲观锁定(Pessimistic Locking) 18. 映射实例(Mapping Examples) 18.1. 雇员/雇主(Employer/Employee) 18.2. 作者/著作(Author/Work) 18.3. 客户/订单/产品(Customer/Order/Product) 19. 工具箱指南 19.1. Schema 生成器(Schema Generation) 19.1.1. 对schema定制化(Customizing the schema) 19.1.2. 运行该工具 19.1.3. 属性(Properties) 19.1.4. 使用Ant(Using Ant) 19.1.5. 对schema的增量更新(Incremental schema updates) 19.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 19.2. 代码生成(Code Generation) 19.2.1. 配置文件(可选) 19.2.2. meta属性 19.2.3. 基本的finder生成器(Basic finder generator) 19.2.4. 基于Velocity的渲染器/生成器(Velocity based renderer/generator) 19.3. 映射文件生成器(Mapping File Generation) 19.3.1. 运行此工具 20. 最佳实践(Best Practices) 前言在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。Hibernate是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型结构中去。
Hibernate不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。
如果你对Hibernate和对象/关系数据库映射还是个新手,或者甚至对Java也不熟悉,请按照下面的步骤来学习。
阅读这个30分钟就可以结束的Chapter 1, 在Tomcat中快速上手,它使用Tomcat。
阅读Chapter 2, 体系结构来理解Hibernate可以使用的环境。
查看Hibernate发行包中的eg/目录,里面有一个简单的独立运行的程序。把你的JDBC驱动拷贝到lib/目录下,修改一下src/hibernate.properties,指定其中你的数据库的信息。进入命令行,切换到你的发行包的目录,输入ant eg(使用了Ant),或者在Windows操作系统中使用build eg。
把这份参考文档作为你学习的主要信息来源。
在Hibernate 的网站上可以找到经常提问的问题与解答(FAQ)。
在Hibernate网站上还有第三方的演示、示例和教程的链接。
Hibernate网站的“社区(Community Area)”是讨论关于设计模式以及很多整合方案(Tomcat, JBoss, Spring,Struts, EJB,等等)的好地方。
离线版本的Hibernate网站随着Hibernate发行包一起发布,位于doc/目录下。
第6章(集合类)、第7章(组件)是由jlinux翻译,第10章(父子关系)是由muziq翻译,第16章(事务和并行)、第17章(映射实例)是由liangchen翻译,其他各章节是由曹晓钢翻译的,第18、19、20章,bruce、robbin也有贡献。曹晓钢也进行了全书从2.0.4更新到2.1.1版本、2.1.2版本的工作。
更详细的翻译者与翻译更新情况,请查阅CVS目录下的TRANSLATE-LOG.TXT文件。
版权声明
=========================================================
Hibernate英文文档属于Hibernate发行包的一部分,遵循LGPL协议。本翻译版本同样遵循LGPL协议。参与翻译的译者一致同意放弃除署名权外对本翻译版本的其它权利要求。
您可以自由链接、下载、传播此文档,或者放置在您的网站上,甚至作为产品的一部分发行。但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。这里“完整”的含义是,不能进行任何删除/增添/注解。若有删除/增添/注解,必须明确声明那些部分并非本文档的一部分。
Chapter 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅这份教程讨论如何在Apache Tomcat servlet容器中为web程序安装Hibernate 2.1。Hibernate在大多数主流J2EE应用服务器 的受管理环境中都可以良好运作,也可以作为独立应用程序运行。在本例中的示例数据库系统是PostgreSQL 7.3,当然也可以 很容易的换成Hibernate 支持的其它16种数据库之一。
第一步是拷贝所有需要的运行库到Tomcat去。在这篇教程中,我们使用一个单独的web程序(webapps/quickstart)。我们要考虑全局库文件搜索路径(TOMCAT/common/lib)和本web应用程序上下文的类装载器搜索路径(对于jar来说是webapps/quickstart/WEB-INF/lib,对于class文件来说是webapps/quickstart/WEB-INF/classes)。我们把这两个类装载器级别分别称为全局类路径(global classpath)和上下文类路径(context classpath)。
首先,把数据库需要的JDBC驱动拷贝到全局类路径。这是tomcat附带的DBCP连接池软件所要求的。对于本教程来说,把pg73jdbc3.jar库文件(对应PostgreSQL 7.3和JDK 1.4)到全局类装载器路径去。如果你使用一个不同的数据库,拷贝相应的JDBC 驱动)。
不要拷贝任何其他东西到全局类装载器去。否则你可能在一些工具上遇到麻烦,比如log4j, commons-logging等。 记得要使用每个web应用程序自己的上下文类路径,就是说把你自己的类库拷贝到WEB-INF/lib下去,把配置文件configuration/property拷贝到WEB-INF/classes下面去。这两个目录默认都是上下文类路径级别的。
Hibernate本身打包成一个JAR库。hibernate2.jar文件要和你应用程序的其他库文件一起放在上下文类路径中。在运行时,Hibernate还需要一些第三方库,它们在Hibernate发行包的lib/目录下。参见Table 1.1。把你需要的第三方库文件也拷贝到上下文类路径去。
要为Tomcat和Hibernate都配置数据库连接。也就是说Tomcat要负责提供JDBC连接池,Hibernate通过JNDI来请求这些连接。Tomcat把连接池绑定到JNDI。
Table 1.1. Hibernate 第三方库
库 描述 dom4j (必需) Hibernate在解析XML配置和XML映射元文件时需要使用dom4j。 CGLIB (必需) Hibernate在运行时使用这个代码生成库强化类(与Java反射机制联合使用)。 Commons Collections, Commons Logging (必需) Hibernat使用Apache Jakarta Commons项目提供的多个工具类库。 ODMG4 (必需) Hibernate提供了一个可选的ODMG兼容持久化管理界面。如果你需要映射集合,你就需要这个类库,就算你不是为了使用ODMG API。我们在这个教程中没有使用集合映射,但不管怎样把这个JAR拷贝过去总是不错的。 Log4j (可选) Hibernate使用Commons Logging API,后者可以使用Log4j作为实施log的机制。如果把Log4j库放到上下文类目录中,Commons Logging就会使用Log4j和它在上下文类路径中找到的log4j.properties文件。在Hibernate发行包中包含有一个示例的properties文件。所以,也把log4j.jar拷贝到你的上下文类路径去吧。 其他文件是不是必需的? 请察看Hibernate发行包中的/lib/README.txt文件。这是一个Hibernate发行包中附带的第三方类库的列表,总是保持更新。你可以在那里找到所有必需或者可选的类库的列表。好了,现在所有的类库已经被拷贝过去了,让我们在Tomcat的主配置文件,TOMCAT/conf/server.xml中增加一个数据库JDBC连接池的资源声明
需要更多资料请到站点http://softtrade.vicp.net
本文地址:http://com.8s8s.com/it/it16782.htm