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