[hibernate-commits] Hibernate SVN: r14081 - in core/trunk/documentation/manual/zh-CN: src/main and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Oct 9 16:10:35 EDT 2007


Author: steve.ebersole at jboss.com
Date: 2007-10-09 16:10:34 -0400 (Tue, 09 Oct 2007)
New Revision: 14081

Added:
   core/trunk/documentation/manual/zh-CN/glossary.txt
   core/trunk/documentation/manual/zh-CN/src/main/docbook/Hibernate_Reference.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/architecture.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/association_mapping.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/basic_mapping.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/batch.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/best_practices.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/collection_mapping.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/component_mapping.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/configuration.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/events.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/example_mappings.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/example_parentchild.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/example_weblog.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/filters.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/inheritance_mapping.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/performance.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/persistent_classes.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/preface.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/query_criteria.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/query_hql.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/query_sql.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/quickstart.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/session_api.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/toolset_guide.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/transactions.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/tutorial.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/content/xml.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/AuthorWork.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/AuthorWork.zargo
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/CustomerOrderProduct.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/CustomerOrderProduct.zargo
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/EmployerEmployee.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/EmployerEmployee.zargo
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/full_cream.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/full_cream.svg
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/hibernate_logo_a.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/lite.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/lite.svg
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/overview.png
   core/trunk/documentation/manual/zh-CN/src/main/docbook/images/overview.svg
   core/trunk/documentation/manual/zh-CN/src/main/docbook/legal_notice.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/translators.xml
Removed:
   core/trunk/documentation/manual/zh-CN/src/main/docbook/glossary.txt
   core/trunk/documentation/manual/zh-CN/src/main/docbook/master.xml
   core/trunk/documentation/manual/zh-CN/src/main/docbook/modules/
   core/trunk/documentation/manual/zh-CN/src/main/resources/
Log:
new docbook layout (prep for translations migration to PO)

Copied: core/trunk/documentation/manual/zh-CN/glossary.txt (from rev 14080, core/trunk/documentation/manual/zh-CN/src/main/docbook/glossary.txt)
===================================================================
--- core/trunk/documentation/manual/zh-CN/glossary.txt	                        (rev 0)
+++ core/trunk/documentation/manual/zh-CN/glossary.txt	2007-10-09 20:10:34 UTC (rev 14081)
@@ -0,0 +1,27 @@
+O/R Mapping 对象/关系数据库映射
+identifier property: 标识属性
+discriminator: 辨别标志(不使用"鉴别器")
+
+join-subclass,union-subclass,join: 不翻译
+
+fine-grained 细粒度
+domain model 领域模型
+business object 业务对象(v2的时候翻译为"商业对象",被无数人痛骂....)
+annotations 注解(这个词还比较新,也见到有翻译为"特殊注释"/"标注"的)
+
+Aggregate functions 统计函数 (聚集函数?聚合函数? 还是翻译为统计函数才能让人看懂)
+Criteria Queries 条件查询(标准查询?这里Criteria是"判据"的含义,而非"标准",意译为条件查询更加明白)
+
+session flush session清洗
+lazy fetching 延迟加载(懒加载,翻译很直白,但是却不易理解)
+
+对象状态:
+ persistent class 持久化类
+ persistent object 持久对象 (体现这是与某个持久化设备联系的,掉电之后不消失)
+ transient object 瞬时对象  (其含义是仅在内存中存在的,掉电之后消失,翻译为瞬时对象比较好)
+ detached object 脱管对象(与session脱离的对象)
+
+outer-join fetching 外连接抓取 (fetch一般翻译为"获取",v2翻译的时候,为了突出其主动获取的特点,翻译为"抓取")
+
+class hierarchy 类分层结构 http://www.umlchina.com/xprogrammer/glossary1.htm
+inheritance hierarchy 继承层次 http://www-128.ibm.com/developerworks/cn/java/j-aopwork4/?ca=dwcn-newsletter-java

Copied: core/trunk/documentation/manual/zh-CN/src/main/docbook/Hibernate_Reference.xml (from rev 14073, core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml)
===================================================================
--- core/trunk/documentation/manual/zh-CN/src/main/docbook/Hibernate_Reference.xml	                        (rev 0)
+++ core/trunk/documentation/manual/zh-CN/src/main/docbook/Hibernate_Reference.xml	2007-10-09 20:10:34 UTC (rev 14081)
@@ -0,0 +1,72 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+        <!ENTITY versionNumber "3.3.0.alpha1">
+        <!ENTITY copyrightYear "2004">
+        <!ENTITY copyrightHolder "Red Hat Middleware, LLC.">
+]>
+
+<book>
+
+    <bookinfo>
+        <title>HIBERNATE - 符合Java习惯的关系数据库持久化</title>
+        <subtitle>Hibernate参考文档</subtitle>
+        <releaseinfo>&versionNumber;</releaseinfo>
+        <productnumber>&versionNumber;</productnumber>
+        <issuenum>1</issuenum>
+        <mediaobject>
+            <imageobject role="fo">
+                <imagedata fileref="images/hibernate_logo_a.png" align="center" />
+            </imageobject>
+            <imageobject role="html">
+                <imagedata fileref="images/hibernate_logo_a.png" depth="3cm" />
+            </imageobject>
+        </mediaobject>
+        <copyright>
+            <year>&copyrightYear;</year>
+            <holder>&copyrightHolder;</holder>
+        </copyright>
+        <xi:include href="translators.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+        <xi:include href="legal_notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    </bookinfo>
+
+    <toc/>
+
+    <xi:include href="content/preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+	<xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+	<xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+	<xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+	<xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/basic_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/collection_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/association_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/component_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/inheritance_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/session_api.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/transactions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/events.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/batch.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/query_hql.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/query_criteria.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/query_sql.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/filters.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/xml.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/performance.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/toolset_guide.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/example_parentchild.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/example_weblog.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/example_mappings.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="content/best_practices.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+</book>
+

Copied: core/trunk/documentation/manual/zh-CN/src/main/docbook/content/architecture.xml (from rev 14080, core/trunk/documentation/manual/zh-CN/src/main/docbook/modules/architecture.xml)
===================================================================
--- core/trunk/documentation/manual/zh-CN/src/main/docbook/content/architecture.xml	                        (rev 0)
+++ core/trunk/documentation/manual/zh-CN/src/main/docbook/content/architecture.xml	2007-10-09 20:10:34 UTC (rev 14081)
@@ -0,0 +1,284 @@
+<chapter id="architecture">
+
+    <title>体系结构(Architecture)</title>
+    <sect1 id="architecture-overview" revision="1">
+        <title>概况(Overview)</title>
+        
+        <para>
+            一个非常简要的Hibernate体系结构的概要图:
+        </para>
+
+        <mediaobject>
+            <imageobject role="fo">
+                <imagedata fileref="images/overview.svg" format="SVG" align="center"/>
+            </imageobject>
+            <imageobject role="html">
+                <imagedata fileref="../shared/images/overview.gif" format="GIF" align="center"/>
+            </imageobject>
+        </mediaobject>
+
+        <para>
+            从这个图可以看出,Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。
+        </para>
+
+        <para>
+            我们来更详细地看一下Hibernate运行时体系结构。由于Hibernate非常灵活,且支持多种应用方案,
+            所以我们这只描述一下两种极端的情况。“轻型”的体系结构方案,要求应用程序提供自己的JDBC
+            连接并管理自己的事务。这种方案使用了Hibernate API的最小子集:
+        </para>
+
+        <mediaobject>
+            <imageobject role="fo">
+                <imagedata fileref="images/lite.svg" format="SVG" align="center"/>
+            </imageobject>
+            <imageobject role="html">
+                <imagedata fileref="../shared/images/lite.gif" format="GIF" align="center"/>
+            </imageobject>
+        </mediaobject>
+
+        <para>
+            “全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。
+        </para>
+
+        <mediaobject>
+            <imageobject role="fo">
+                <imagedata fileref="images/full_cream.svg" format="SVG" align="center"/>
+            </imageobject>
+            <imageobject role="html">
+                <imagedata fileref="../shared/images/full_cream.gif" format="GIF" align="center"/>
+            </imageobject>
+        </mediaobject>
+
+        <para>
+            图中各个对象的定义如下:
+
+            <variablelist spacing="compact">
+                <varlistentry>
+                    <term>SessionFactory (<literal>org.hibernate.SessionFactory</literal>)</term>
+                    <listitem>
+                        <para>
+                            针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。
+                            它是生成<literal>Session</literal>的工厂,本身要用到<literal>ConnectionProvider</literal>。
+                            该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term>Session (<literal>org.hibernate.Session</literal>)</term>
+                    <listitem>
+                        <para>
+                            表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短。
+                            其隐藏了JDBC连接,也是<literal>Transaction</literal>的工厂。
+                            其会持有一个针对持久化对象的必选(第一级)缓存,在遍历对象图或者根据持久化标识查找对象时会用到。
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term>持久的对象及其集合</term>
+                    <listitem>
+                        <para>
+                            带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。
+                            这些对象可能是普通的JavaBeans/POJO,唯一特殊的是他们正与(仅仅一个)<literal>Session</literal>相关联。
+                            一旦这个<literal>Session</literal>被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。
+                           (例如,用作跟表示层打交道的数据传输对象。)
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term>瞬态(transient)和脱管(detached)的对象及其集合</term>
+                    <listitem>
+                        <para>
+                            那些目前没有与session关联的持久化类实例。
+                            他们可能是在被应用程序实例化后,尚未进行持久化的对象。
+                            也可能是因为实例化他们的<literal>Session</literal>已经被关闭而脱离持久化的对象。
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term>事务Transaction (<literal>org.hibernate.Transaction</literal>)</term>
+                    <listitem>
+                        <para>
+                            (可选的)应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。
+                            它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
+                            某些情况下,一个<literal>Session</literal>之内可能包含多个<literal>Transaction</literal>对象。
+                            尽管是否使用该对象是可选的,但无论是使用底层的API还是使用<literal>Transaction</literal>对象,事务边界的开启与关闭是必不可少的。
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term>ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)</term>
+                    <listitem>
+                        <para>
+                            (可选的)生成JDBC连接的工厂(同时也起到连接池的作用)。
+                            它通过抽象将应用从底层的<literal>Datasource</literal>或<literal>DriverManager</literal>隔离开。
+                            仅供开发者扩展/实现用,并不暴露给应用程序使用。
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term>TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)</term>
+                    <listitem>
+                        <para>
+                           (可选的)生成<literal>Transaction</literal>对象实例的工厂。
+                           仅供开发者扩展/实现用,并不暴露给应用程序使用。
+                        </para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term><emphasis>扩展接口</emphasis></term>
+                    <listitem>
+                        <para>
+                             Hibernate提供了很多可选的扩展接口,你可以通过实现它们来定制你的持久层的行为。
+                             具体请参考API文档。
+                        </para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+        </para>
+
+        <para>
+            在特定“轻型”的体系结构中,应用程序可能绕过
+            <literal>Transaction</literal>/<literal>TransactionFactory</literal> 以及
+            <literal>ConnectionProvider</literal> 等API直接跟JTA或JDBC打交道。
+        </para>
+    </sect1>
+
+    <sect1 id="architecture-states" revision="1">
+        <title>实例状态</title>
+        <para>
+            一个持久化类的实例可能处于三种不同状态中的某一种。
+            这三种状态的定义则与所谓的<emphasis>持久化上下文(persistence context)</emphasis>有关。
+            Hibernate的<literal>Session</literal>对象就是这个所谓的持久化上下文:
+        </para>
+        
+       <variablelist spacing="compact">
+            <varlistentry>
+                <term>瞬态(transient)</term>
+                <listitem>
+                    <para>
+                        该实例从未与任何持久化上下文关联过。它没有持久化标识(相当于主键值)。
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>持久化(persistent)</term>
+                <listitem>
+                    <para>
+                        实例目前与某个持久化上下文有关联。
+                        它拥有持久化标识(相当于主键值),并且可能在数据库中有一个对应的行。
+                        对于某一个特定的持久化上下文,Hibernate<emphasis>保证</emphasis>持久化标识与Java标识(其值代表对象在内存中的位置)等价。
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>脱管(detached)</term>
+                <listitem>
+                    <para>
+                        实例曾经与某个持久化上下文发生过关联,不过那个上下文被关闭了,
+                        或者这个实例是被序列化(serialize)到另外的进程。
+                        它拥有持久化标识,并且在数据库中可能存在一个对应的行。
+                        对于脱管状态的实例,Hibernate不保证任何持久化标识和Java标识的关系。
+                    </para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </sect1>    
+
+    <sect1 id="architecture-jmx" revision="1">
+        <title>JMX整合</title>
+
+        <para>
+            JMX是管理Java组件(Java components)的J2EE标准。 Hibernate 可以通过一个JMX标准服务来管理。
+            在这个发行版本中,我们提供了一个MBean接口的实现,即
+            <literal>org.hibernate.jmx.HibernateService</literal>。
+        </para>
+
+        <para>
+            想要看如何在JBoss应用服务器上将Hibernate部署为一个JMX服务的例子,您可以参考JBoss用户指南。
+            我们现在说一下在Jboss应用服务器上,使用JMX来部署Hibernate的好处:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Session管理:</emphasis> Hibernate的<literal>Session</literal>对象的生命周期可以
+                    自动跟一个JTA事务边界绑定。这意味着你无需手工开关<literal>Session</literal>了, 这项
+                    工作会由JBoss EJB 拦截器来完成。你再也不用担心你的代码中的事务边界了(除非你想利用Hibernate提供可选
+                    的<literal>Transaction</literal> API来自己写一个便于移植的的持久层)。 
+                    你通过调用<literal>HibernateContext</literal>来访问<literal>Session</literal>。
+                </para>
+            </listitem>
+            <listitem>
+                <para>
+                    <emphasis>HAR 部署:</emphasis> 通常情况下,你会使用JBoss的服务部署描述符(在EAR或/和SAR文件中)来部署Hibernate JMX服务。
+                    这种部署方式支持所有常见的Hibernate <literal>SessionFactory</literal>的配置选项。
+                    不过,你仍需在部署描述符中,列出你所有的映射文件的名字。如果你使用HAR部署方式, JBoss 
+                    会自动探测出你的HAR文件中所有的映射文件。
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            这些选项更多的描述,请参考JBoss 应用程序用户指南。
+        </para>
+
+        <para>
+            将Hibernate以部署为JMX服务的另一个好处,是可以查看Hibernate的运行时统计信息。参看
+            <xref linkend="configuration-optional-statistics"/>.
+        </para>
+    </sect1>
+
+    <sect1 id="architecture-jca" revision="1">
+        <title>对JCA的支持</title>
+        <para>
+            Hibernate也可以被配置为一个JCA连接器(JCA connector)。更多信息请参看网站。
+            请注意,Hibernate对JCA的支持,仍处于实验性阶段。
+        </para>
+    </sect1>
+    <sect1 id="architecture-current-session" revision="2">
+        <title>上下文相关的(Contextual)Session</title>
+        <para>
+           	使用Hibernate的大多数应用程序需要某种形式的“上下文相关的” session,特定的session在整个特定的上下文范围内始终有效。然而,对不同类型的应用程序而言,要为什么是组成这种“上下文”下一个定义通常是困难的;不同的上下文对“当前”这个概念定义了不同的范围。在3.0版本之前,使用Hibernate的程序要么采用自行编写的基于<literal>ThreadLocal</literal>的上下文session,要么采用<literal>HibernateUtil</literal>这样的辅助类,要么采用第三方框架(比如Spring或Pico),它们提供了基于代理(proxy)或者基于拦截器(interception)的上下文相关session。
+        </para>
+        <para>
+            从3.0.1版本开始,Hibernate增加了<literal>SessionFactory.getCurrentSession()</literal>方法。一开始,它假定了采用<literal>JTA</literal>事务,<literal>JTA</literal>事务定义了当前session的范围和上下文(scope and context)。Hibernate开发团队坚信,因为有好几个独立的<literal>JTA TransactionManager</literal>实现稳定可用,不论是否被部署到一个<literal>J2EE</literal>容器中,大多数(假若不是所有的)应用程序都应该采用<literal>JTA</literal>事务管理。基于这一点,采用<literal>JTA</literal>的上下文相关session可以满足你一切需要。
+        </para>
+        <para>
+            更好的是,从3.1开始,<literal>SessionFactory.getCurrentSession()</literal>的后台实现是可拔插的。因此,我们引入了新的扩展接口(<literal>org.hibernate.context.CurrentSessionContext</literal>)和新的配置参数(<literal>hibernate.current_session_context_class</literal>),以便对什么是“当前session”的范围和上下文(scope and context)的定义进行拔插。
+        </para>
+        <para>
+            请参阅<literal>org.hibernate.context.CurrentSessionContext</literal>接口的Javadoc,那里有关于它的契约的详细讨论。它定义了单一的方法,<literal>currentSession()</literal>,特定的实现用它来负责跟踪当前的上下文session。Hibernate内置了此接口的三种实现。
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <literal>org.hibernate.context.JTASessionContext</literal> - 当前session根据<literal>JTA</literal>来跟踪和界定。这和以前的仅支持JTA的方法是完全一样的。详情请参阅Javadoc。
+                </para>
+            </listitem>
+            <listitem>
+                <para>
+                    <literal>org.hibernate.context.ThreadLocalSessionContext</literal> - 当前session通过当前执行的线程来跟踪和界定。详情也请参阅Javadoc。
+                </para>
+            </listitem>
+            <listitem>
+                <para>
+                    <literal>org.hibernate.context.ManagedSessionContext</literal> - 当前session通过当前执行的线程来跟踪和界定。但是,你需要负责使用这个类的静态方法将<literal>Session</literal>实例绑定、或者取消绑定,它并不会打开(open)、flush或者关闭(close)任何<literal>Session</literal>。
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            前两种实现都提供了“每数据库事务对应一个session”的编程模型,也称作<emphasis>每次请求一个session</emphasis>。Hibernate session的起始和终结由数据库事务的生存来控制。假若你在纯粹的 Java SE之上采用自行编写代码来管理事务,而不使用JTA,建议你使用Hibernate <literal>Transaction</literal> API来把底层事务实现从你的代码中隐藏掉。如果你使用JTA,请使用JTA借口来管理Transaction。如果你在支持CMT的EJB容器中执行代码,事务边界是声明式定义的,你不需要在代码中进行任何事务或session管理操作。请参阅<xref linkend="transactions"/>一节来阅读更多的内容和示例代码。
+        </para>
+
+        <para>
+            <literal>hibernate.current_session_context_class</literal>配置参数定义了应该采用哪个<literal>org.hibernate.context.CurrentSessionContext</literal>实现。注意,为了向下兼容,如果未配置此参数,但是存在<literal>org.hibernate.transaction.TransactionManagerLookup</literal>的配置,Hibernate会采用<literal>org.hibernate.context.JTASessionContext</literal>。一般而言,此参数的值指明了要使用的实现类的全名,但那三种内置的实现可以使用简写,即"jta"、"thread"和"managed"。
+            
+        </para>
+        
+    </sect1>
+
+</chapter>
+
+

Copied: core/trunk/documentation/manual/zh-CN/src/main/docbook/content/association_mapping.xml (from rev 14080, core/trunk/documentation/manual/zh-CN/src/main/docbook/modules/association_mapping.xml)
===================================================================
--- core/trunk/documentation/manual/zh-CN/src/main/docbook/content/association_mapping.xml	                        (rev 0)
+++ core/trunk/documentation/manual/zh-CN/src/main/docbook/content/association_mapping.xml	2007-10-09 20:10:34 UTC (rev 14081)
@@ -0,0 +1,579 @@
+<chapter id="associations">
+
+    <title>关联关系映射</title>
+	
+    <sect1 id="assoc-intro" revision="1">
+         <title>介绍</title>   
+		 
+        <para>
+            关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,由浅至深讲述一遍典型的案例。在所有的例子中,我们都使用 <literal>Person</literal>和<literal>Address</literal>。
+        </para>
+        
+         <para>
+        	我们根据映射关系是否涉及连接表以及多样性来划分关联类型。
+        </para>
+		
+         <para>
+        	在传统的数据建模中,允许为Null值的外键被认为是一种不好的实践,因此我们所有的例子中都使用不允许为Null的外键。这并不是Hibernate的要求,即使你删除掉不允许为Null的约束,Hibernate映射一样可以工作的很好。
+        </para>
+		
+    </sect1>
+
+    <sect1 id="assoc-unidirectional" revision="1">
+         <title>单向关联(Unidirectional associations)</title>
+		 
+        <sect2 id="assoc-unidirectional-m21">
+        <title>多对一(many to one)</title>
+        
+        <para>
+             <emphasis>单向many-to-one关联</emphasis>是最常见的单向关联关系。
+        </para>
+        
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <many-to-one name="address" 
+        column="addressId"
+        not-null="true"/>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key, addressId bigint not null )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+
+        <sect2 id="assoc-unidirectional-121">
+        <title>一对一(one to one)</title>
+        
+         <para>
+             <emphasis>基于外键关联的单向一对一关联</emphasis>和<emphasis>单向多对一关联</emphasis>几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。
+        </para>
+		
+       <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <many-to-one name="address" 
+        column="addressId" 
+        unique="true"
+        not-null="true"/>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key, addressId bigint not null unique )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+         <para>
+            <emphasis>基于主键关联的单向一对一关联</emphasis>通常使用一个特定的id生成器。(请注意,在这个例子中我们掉换了关联的方向。)
+        </para>
+		
+       <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+</class>
+
+<class name="Address">
+    <id name="id" column="personId">
+        <generator class="foreign">
+            <param name="property">person</param>
+        </generator>
+    </id>
+    <one-to-one name="person" constrained="true"/>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table Address ( personId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+        
+        <sect2 id="assoc-unidirectional-12m">
+        <title>一对多(one to many)</title>
+        
+        <para>
+            <emphasis>基于外键关联的单向一对多关联</emphasis>是一种很少见的情况,并不推荐使用。
+        </para>
+        
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <set name="addresses">
+        <key column="personId" 
+            not-null="true"/>
+        <one-to-many class="Address"/>
+    </set>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table Address ( addressId bigint not null primary key, personId bigint not null )
+        ]]></programlisting>
+        
+         <para>
+            我们认为对于这种关联关系最好使用连接表。
+        </para>
+		
+        </sect2>
+    
+    </sect1>
+
+    <sect1 id="assoc-unidirectional-join" revision="1">
+        <title>使用连接表的单向关联(Unidirectional associations with join tables)</title>
+		 
+        <sect2 id="assoc-unidirectional-join-12m">
+        <title>一对多(one to many)</title>
+        
+         <para>
+            <emphasis>基于连接表的单向一对多关联</emphasis> 应该优先被采用。请注意,通过指定<literal>unique="true"</literal>,我们可以把多样性从多对多改变为一对多。
+        </para>
+		
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <set name="addresses" table="PersonAddress">
+        <key column="personId"/>
+        <many-to-many column="addressId"
+            unique="true"
+            class="Address"/>
+    </set>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId not null, addressId bigint not null primary key )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+
+        <sect2 id="assoc-unidirectional-join-m21">
+        <title>多对一(many to one)</title>
+        
+        <para>
+            <emphasis>基于连接表的单向多对一关联</emphasis>在关联关系可选的情况下应用也很普遍。
+        </para>
+        
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <join table="PersonAddress" 
+        optional="true">
+        <key column="personId" unique="true"/>
+        <many-to-one name="address"
+            column="addressId" 
+            not-null="true"/>
+    </join>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+
+        <sect2 id="assoc-unidirectional-join-121">
+        <title>一对一(one to one)</title>
+        
+         <para>
+            <emphasis>基于连接表的单向一对一关联</emphasis>非常少见,但也是可行的。
+        </para>
+		
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <join table="PersonAddress" 
+        optional="true">
+        <key column="personId" 
+            unique="true"/>
+        <many-to-one name="address"
+            column="addressId" 
+            not-null="true"
+            unique="true"/>
+    </join>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+
+        <sect2 id="assoc-unidirectional-join-m2m">
+        <title>多对多(many to many)</title>
+        
+         <para>
+            最后,还有 <emphasis>单向多对多关联</emphasis>.
+        </para>
+		
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <set name="addresses" table="PersonAddress">
+        <key column="personId"/>
+        <many-to-many column="addressId"
+            class="Address"/>
+    </set>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+
+    </sect1>
+
+    <sect1 id="assoc-bidirectional" revision="1">
+        <title>双向关联(Bidirectional associations)</title>
+        
+        <sect2 id="assoc-bidirectional-m21" revision="2">
+        <title>一对多(one to many) / 多对一(many to one)</title>
+        
+         <para>
+            <emphasis>双向多对一关联</emphasis> 是最常见的关联关系。(这也是标准的父/子关联关系。)
+        </para>
+		
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <many-to-one name="address" 
+        column="addressId"
+        not-null="true"/>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+    <set name="people" inverse="true">
+        <key column="addressId"/>
+        <one-to-many class="Person"/>
+    </set>
+</class>]]></programlisting>
+
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key, addressId bigint not null )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+                <para>
+            如果你使用<literal>List</literal>(或者其他有序集合类),你需要设置外键对应的<literal>key</literal>列为 <literal>not null</literal>,让Hibernate来从集合端管理关联,维护每个元素的索引(通过设置<literal>update="false"</literal> and <literal>insert="false"</literal>来对另一端反向操作)。
+        </para>
+
+        <programlisting><![CDATA[<class name="Person">
+   <id name="id"/>
+   ...
+   <many-to-one name="address"
+      column="addressId"
+      not-null="true"
+      insert="false"
+      update="false"/>
+</class>
+
+<class name="Address">
+   <id name="id"/>
+   ...
+   <list name="people">
+      <key column="addressId" not-null="true"/>
+      <list-index column="peopleIdx"/>
+      <one-to-many class="Person"/>
+   </list>
+</class>]]></programlisting>
+
+            <para>
+                假若集合映射的<literal>&lt;key&gt;</literal>元素对应的底层外键字段是<literal>NOT NULL</literal>的,那么为这一key元素定义<literal>not-null="true"</literal>是很重要的。不要仅仅为可能的嵌套<literal>&lt;column&gt;</literal>元素定义<literal>not-null="true"</literal>,<literal>&lt;key&gt;</literal>元素也是需要的。
+            </para>
+
+        </sect2>
+        
+        <sect2 id="assoc-bidirectional-121">
+        <title>一对一(one to one)</title>
+        
+         <para>
+           <emphasis>基于外键关联的双向一对一关联</emphasis>也很常见。
+        </para>
+		
+       <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <many-to-one name="address" 
+        column="addressId" 
+        unique="true"
+        not-null="true"/>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+   <one-to-one name="person" 
+        property-ref="address"/>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key, addressId bigint not null unique )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+         <para>
+            <emphasis>基于主键关联的一对一关联</emphasis>需要使用特定的id生成器。
+        </para>
+		
+       <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <one-to-one name="address"/>
+</class>
+
+<class name="Address">
+    <id name="id" column="personId">
+        <generator class="foreign">
+            <param name="property">person</param>
+        </generator>
+    </id>
+    <one-to-one name="person" 
+        constrained="true"/>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table Address ( personId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+        
+    </sect1>
+
+    <sect1 id="assoc-bidirectional-join" revision="1">
+        <title>使用连接表的双向关联(Bidirectional associations with join tables)</title>
+        
+        <sect2 id="assoc-bidirectional-join-12m">
+        <title>一对多(one to many) /多对一( many to one)</title>
+        
+         <para>
+             <emphasis>基于连接表的双向一对多关联</emphasis>。注意<literal>inverse="true"</literal>可以出现在关联的任意一端,即collection端或者join端。
+        </para>
+		
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <set name="addresses" 
+        table="PersonAddress">
+        <key column="personId"/>
+        <many-to-many column="addressId"
+            unique="true"
+            class="Address"/>
+    </set>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+    <join table="PersonAddress" 
+        inverse="true" 
+        optional="true">
+        <key column="addressId"/>
+        <many-to-one name="person"
+            column="personId"
+            not-null="true"/>
+    </join>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+
+         <sect2 id="assoc-bidirectional-join-121">
+        <title>一对一(one to one)</title>
+        
+         <para>
+            <emphasis>基于连接表的双向一对一关联</emphasis>极为罕见,但也是可行的。
+        </para>
+		
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <join table="PersonAddress" 
+        optional="true">
+        <key column="personId" 
+            unique="true"/>
+        <many-to-one name="address"
+            column="addressId" 
+            not-null="true"
+            unique="true"/>
+    </join>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+    <join table="PersonAddress" 
+        optional="true"
+        inverse="true">
+        <key column="addressId" 
+            unique="true"/>
+        <many-to-one name="person"
+            column="personId" 
+            not-null="true"
+            unique="true"/>
+    </join>
+</class>]]></programlisting>
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+
+        </sect2>
+        
+        <sect2 id="assoc-bidirectional-join-m2m" revision="1">
+        <title>多对多(many to many)</title>
+        
+        <para>
+            最后,还有 <emphasis>双向多对多关联</emphasis>.
+        </para>
+        
+        <programlisting><![CDATA[<class name="Person">
+    <id name="id" column="personId">
+        <generator class="native"/>
+    </id>
+    <set name="addresses"  table="PersonAddress">
+        <key column="personId"/>
+        <many-to-many column="addressId"
+            class="Address"/>
+    </set>
+</class>
+
+<class name="Address">
+    <id name="id" column="addressId">
+        <generator class="native"/>
+    </id>
+    <set name="people" inverse="true"  table="PersonAddress">
+        <key column="addressId"/>
+        <many-to-many column="personId"
+            class="Person"/>
+    </set>
+</class>]]></programlisting>
+
+        <programlisting><![CDATA[
+create table Person ( personId bigint not null primary key )
+create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )
+create table Address ( addressId bigint not null primary key )
+        ]]></programlisting>
+        
+        </sect2>
+        
+    </sect1>
+    <sect1 id="assoc-complex">
+        <title>更复杂的关联映射</title>
+        
+        <para>
+            更复杂的关联连接<emphasis>极为</emphasis>罕见。 
+            通过在映射文档中嵌入SQL片断,Hibernate也可以处理更为复杂的情况。比如,假若包含历史帐户数据的表定义了<literal>accountNumber</literal>, <literal>effectiveEndDate</literal> 和<literal>effectiveStartDate</literal>字段,按照下面映射:
+        </para>
+        
+        <programlisting><![CDATA[<properties name="currentAccountKey">
+    <property name="accountNumber" type="string" not-null="true"/>
+    <property name="currentAccount" type="boolean">
+        <formula>case when effectiveEndDate is null then 1 else 0 end</formula>
+    </property>
+</properties>
+<property name="effectiveEndDate" type="date"/>
+<property name="effectiveStateDate" type="date" not-null="true"/>]]></programlisting>
+
+        <para>
+        那么我们可以对<emphasis>目前(current)</emphasis>实例(其<literal>effectiveEndDate</literal>为null)使用这样的关联映射:
+        </para>
+        
+        <programlisting><![CDATA[<many-to-one name="currentAccountInfo" 
+        property-ref="currentAccountKey"
+        class="AccountInfo">
+    <column name="accountNumber"/>
+    <formula>'1'</formula>
+</many-to-one>]]></programlisting>
+
+        <para>
+            更复杂的例子,假想<literal>Employee</literal>和<literal>Organization</literal>之间的关联是通过一个<literal>Employment</literal>中间表维护的,而中间表中填充了很多历史雇员数据。那“雇员的<emphasis>最新</emphasis>雇主”这个关联(最新雇主就是<literal>startDate</literal>最后的那个)可以这样映射:
+        </para>
+        
+        <programlisting><![CDATA[<join>
+    <key column="employeeId"/>
+    <subselect>
+        select employeeId, orgId 
+        from Employments 
+        group by orgId 
+        having startDate = max(startDate)
+    </subselect>
+    <many-to-one name="mostRecentEmployer" 
+            class="Organization" 
+            column="orgId"/>
+</join>]]></programlisting>
+
+        <para>
+        使用这一功能时可以充满创意,但通常更加实用的是用HQL或条件查询来处理这些情形。
+        </para>
+
+    </sect1>
+
+
+</chapter>
+

Copied: core/trunk/documentation/manual/zh-CN/src/main/docbook/content/basic_mapping.xml (from rev 14080, core/trunk/documentation/manual/zh-CN/src/main/docbook/modules/basic_mapping.xml)
===================================================================
--- core/trunk/documentation/manual/zh-CN/src/main/docbook/content/basic_mapping.xml	                        (rev 0)
+++ core/trunk/documentation/manual/zh-CN/src/main/docbook/content/basic_mapping.xml	2007-10-09 20:10:34 UTC (rev 14081)
@@ -0,0 +1,2982 @@
+<chapter id="mapping">
+    <title>对象/关系数据库映射基础(Basic O/R Mapping)</title>
+
+    <sect1 id="mapping-declaration" revision="1">
+        <title>映射定义(Mapping declaration)</title>
+
+        <para>
+            对象和关系数据库之间的映射通常是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,
+            并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的,
+            而非表的定义。
+        </para>
+        
+        
+        <para>
+            请注意,虽然很多Hibernate用户选择手写XML映射文档,但也有一些工具可以用来生成映射文档,
+            包括XDoclet,Middlegen和AndroMDA。
+        </para>
+
+        <para>
+            让我们从一个映射的例子开始:
+        </para>
+
+        <programlisting id="mapping-declaration-ex1" revision="1"><![CDATA[<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="eg">
+
+        <class name="Cat" 
+            table="cats"
+            discriminator-value="C">
+                
+                <id name="id">
+                        <generator class="native"/>
+                </id>
+
+                <discriminator column="subclass" 
+                     type="character"/>
+
+                <property name="weight"/>
+
+                <property name="birthdate"
+                    type="date" 
+                    not-null="true" 
+                    update="false"/>
+
+                <property name="color"
+                    type="eg.types.ColorUserType"
+                    not-null="true"
+                    update="false"/>
+
+                <property name="sex"
+                    not-null="true" 
+                    update="false"/>
+
+                <property name="litterId"
+                    column="litterId"
+                    update="false"/>
+
+                <many-to-one name="mother"
+                    column="mother_id"
+                    update="false"/>
+
+                <set name="kittens"
+                    inverse="true"
+                    order-by="litter_id">
+                        <key column="mother_id"/>
+                        <one-to-many class="Cat"/>
+                </set>
+
+                <subclass name="DomesticCat"
+                    discriminator-value="D">
+
+                        <property name="name" 
+                            type="string"/>
+
+                </subclass>
+
+        </class>
+
+        <class name="Dog">
+                <!-- mapping for Dog could go here -->
+        </class>
+
+</hibernate-mapping>]]></programlisting>
+
+        <para>
+             我们现在开始讨论映射文档的内容。我们只描述Hibernate在运行时用到的文档元素和属性。
+             映射文档还包括一些额外的可选属性和元素,它们在使用schema导出工具的时候会影响导出的数据库schema结果。
+             (比如,<literal> not-null</literal> 属性。)
+        </para>
+
+
+
+        <sect2 id="mapping-declaration-doctype" revision="3">
+            <title>Doctype</title>
+
+            <para>
+                所有的XML映射都需要定义如上所示的doctype。DTD可以从上述URL中获取,
+                也可以从<literal>hibernate-x.x.x/src/net/sf/hibernate</literal>目录中、
+                或<literal>hibernate.jar</literal>文件中找到。Hibernate总是会首先在它的classptah中搜索DTD文件。
+                如果你发现它是通