文档介绍:第12章 Hibernate的O/R映射
本章将介绍如何在Hibernate中完成基本的对象映射配置。本章将不涉及复杂的映射如带有继承关系或关联关系,重点在于如何完成一个单独JavaBean的映射配置。在映射JavaBean的表过程中,会涉及到关于表主键与对象标识之间的映射配置和Hibernate对数据类型的处理。
映射定义(Mapping declaration)
对象和关系数据库之间的映射通常是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。
在入门的章节中,已经介绍过简单的映射文件,下面一个比较完整的例子包含了一些复杂配置的内容,
<hibernate-mapping>元素介绍
<hibernate-mapping>元素是Hibernate映射文件的根元素。这个元素包括一些可选的属性。schema和catalog属性,指明了这个映射所连接(refer)的表所在的schema和/或catalog名称。假若指定了这个属性,表名会加上所指定的schema和catalog的名字扩展为全限定名。假若没有指定,表名就不会使用全限定名。default-cascade指定了未明确注明cascade属性的Java属性和集合类Hibernate会采取什么样的默认级联风格。auto-import属性默认在查询语言中可以使用非全限定名的类名。
<class>元素介绍
可以使用<class>元素来定义一个持久化类。最常见的用法就是使用name和table来制定类和表的关联。
代码 class示例
<class
name="ClassName"
table="tableName"
discriminator-value="discriminator_value"
mutable="true|false"
schema="owner"
catalog="catalog"
proxy="ProxyInterface"
dynamic-update="true|false"
dynamic-insert="true|false"
select-before-update="true|false"
polymorphism="implicit|explicit"
where="arbitrary sql where condition"
persister="PersisterClass"
batch-size="N"
optimistic-lock="none|version|dirty|all"
lazy="true|false"
entity-name="EntityName"
check="arbitrary sql check condition"
rowid="rowid"
subselect="SQL expression"
abstract="true|false"
node="element-name"
/>
<id>元素介绍
被映射的类必须定义对应数据库主键字段。大多数类有一个JavaBeans风格的属性, 为每一个实例包含唯一的标识。<id>元素定义了该属性到数据表主键字段的映射。
代码 id元素示例:
<id
name="propertyName"
type="typename"
column="column_name"
unsaved-value="null|any|none|undefined|id_value"
access="field|property|ClassName"
node="element-name|***@attribute-name|element/***@attribute|.">
 
<generator class="generatorClass"/>
</id>
<property>元素介绍
对象与表的映射关系确定以后,接下来就要更详细的定义了JavaBean属性与数据库表字段的对应关系了,这个工作是由<property>元素完成的。
关于type属性可以是如下几种:
(1)Hibernate基本类型名(比如:integer, string, character, date, timestamp, float, binary, serializable, object, blob)。
(2)一个Java类的名字,这个类属于一种默认基础类型(比如: int, float, char,