文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping package="eg">
<class name="Cat" table="CATS" discriminator-value="C">
<id name="id" column="uid" type="long">
<generator class="hilo"/>
</id>
<discriminator column="subclass" type="character"/>
<property name="birthdate" type="date"/>
<property name="color" not-null="true"/>
<property name="sex" not-null="true" update="false"/>
<property name="weight"/>
<many-to-one name="mate" column="mate_id"/>
<set name="kittens">
<key column="mother_id"/>
<one-to-many class="Cat"/>
</set>
<subclass name="DomesticCat" discriminator-value="D">
<property name="name" type="string"/>
</subclass>
</class>
<id name="id" column="uid" type="long">
<generator class="hilo"/>
</id>
<discriminator column="subclass" type="character"/>
<property name="birthdate" type="date"/>
<property name="color" not-null="true"/>
<property name="sex" not-null="true" update="false"/>
<property name="weight"/>
<many-to-one name="mate" column="mate_id"/>
<set name="kittens">
<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>
<!-- mapping for Dog could go here -->
</class>
</hibernate-mapping>
1,
<hibernate-mapping
schema="schemaName"
default-cascade="none|save-update"
auto-import="true|false"
package="package.name"
/>
schema (可选): 数据库 schema名称。
default-cascade (可选 - 默认为 none): 默认的级联风格。
auto-import (可选 - 默认为 true): 指定是否我们可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定名,就使用这个包名。
2,
<class
name="ClassName"
table="tableName"
discriminator-value="discriminator_value"
mutable="true|false"
schema="owner"
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"
/>
name: 持久化类(或者 接口 )的Java全限定名。
table: 对应的数据库表名。
discriminator-value(辨别值) (可选 - 默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。
mutable(可变) (可选, 默认值为 true): 表明该类的实例可变(不可变)。
schema (可选): 覆盖在根<hibernate-mapping>元素中指定的schema名字。
proxy (可选): 指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。
dynamic-update(动态更新) (可选,默认为false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
dynamic-insert(动态插入) (可选, 默认为false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
select-before-update (可选,默认值为false): 指定Hibernate除非确定对象的确被修改了,不会执行SQL UPDATE操作。在特定场合(实际上,只会发生在一个临时对象关联到一个新的session中去,执行update()的时候),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该进行UPDATE。
polymorphism(多形,多态) (可选, 默认值为 implicit (隐式)): 界定是隐式还是显式的使用查询多态。
where (可选) 指定一个附加的SQLWHERE 条件,在抓取这个类的对象时会一直增加这个条件。
1,
<hibernate-mapping
schema="schemaName"
default-cascade="none|save-update"
auto-import="true|false"
package="package.name"
/>
schema (可选): 数据库 schema名称。
default-cascade (可选 - 默认为 none): 默认的级联风格。
auto-import (可选 - 默认为 true): 指定是否我们可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定名,就使用这个包名。
2,
<class
name="ClassName"
table="tableName"
discriminator-value="discriminator_value"
mutable="true|false"
schema="owner"
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"
/>
name: 持久化类(或者 接口 )的Java全限定名。
table: 对应的数据库表名。
discriminator-value(辨别值) (可选 - 默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。
mutable(可变) (可选, 默认值为 true): 表明该类的实例可变(不可变)。
schema (可选): 覆盖在根<hibernate-mapping>元素中指定的schema名字。
proxy (可选): 指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。
dynamic-update(动态更新) (可选,默认为false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
dynamic-insert(动态插入) (可选, 默认为false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
select-before-update (可选,默认值为false): 指定Hibernate除非确定对象的确被修改了,不会执行SQL UPDATE操作。在特定场合(实际上,只会发生在一个临时对象关联到一个新的session中去,执行update()的时候),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该进行UPDATE。
polymorphism(多形,多态) (可选, 默认值为 implicit (隐式)): 界定是隐式还是显式的使用查询多态。
where (可选) 指定一个附加的SQLWHERE 条件,在抓取这个类的对象时会一直增加这个条件。
persister (可选): 指定一个定制的ClassPersister。
batch-size (可选,默认是1) 指定一个用于根据
标识
符抓取实例时使用的"batch size"(批次抓取数量)。
optimistic-lock(乐观锁定) (可选,默认是version): 决定乐观锁定的
策略
。
lazy(延迟) (可选): 假若设置 lazy="true",就是设置这个类自己的名字作为proxy接口的一种等价快捷形式。
3,
<id
name="propertyName"
type="typename"
column="column_name"
unsaved-value="any|none|null|id_value"
access="field|property|ClassName">
<id
name="propertyName"
type="typename"
column="column_name"
unsaved-value="any|none|null|id_value"
access="field|property|ClassName">
<generator class="generatorClass"/>
</id>
name (可选): 标识属性的名字。
type (可选): 标识Hibernate类型的名字。
column (可选 - 默认为属性名): 主键字段的名字。
unsaved-value (可选 - 默认为null): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注)但未再次持久化的实例区分开来。
access (可选 - 默认为property): Hibernate用来访问属性值的策略。
4,composite-id 联合ID
<composite-id
name="propertyName"
class="ClassName"
unsaved-value="any|none">
</id>
name (可选): 标识属性的名字。
type (可选): 标识Hibernate类型的名字。
column (可选 - 默认为属性名): 主键字段的名字。
unsaved-value (可选 - 默认为null): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注)但未再次持久化的实例区分开来。
access (可选 - 默认为property): Hibernate用来访问属性值的策略。
4,composite-id 联合ID
<composite-id
name="propertyName"
class="ClassName"
unsaved-value="any|none">
<key-property name="propertyName" type="typename" column="column_name"/>
<key-many-to-one name="propertyName" class="ClassName" column="column_name"/>
......
</composite-id>
5,
<discriminator
column="discriminator_column"
type="discriminator_type"
force="true|false"
/>
column (可选 - 默认为 class) 识别器字段的名字
type (可选 - 默认为 string) 一个Hibernate字段类型的名字
force(强制) (可选 - 默认为 false) "强制"Hibernate指定允许的识别器值,就算取得的所有实例都是根类的。
6,
<version
column="version_column"
name="propertyName"
type="typename"
access="field|property|ClassName"
unsaved-value="null|negative|undefined"
/>
column (可选 - 默认为属性名): 指定持有版本号的字段名。
name: 持久化类的属性名。
type (可选 - 默认是 integer): 版本号的类型。
access (可选 - 默认是 property): Hibernate用于访问属性值的策略。
unsaved-value (可选 - 默认是undefined): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和已经在先前的session中保存或装载的实例区分开来。(undefined指明使用标识属性值进行这种判断。)
版本号必须是以下类型:long, integer, short, timestamp或者calendar。
7,
<timestamp
column="timestamp_column"
name="propertyName"
access="field|property|ClassName"
unsaved-value="null|undefined"
/>
column (可选 - 默认为属性名): 持有时间戳的字段名。
name: 在持久化类中的JavaBeans风格的属性名,其Java类型是 Date 或者 Timestamp的。
access (可选 - 默认是 property): Hibernate用于访问属性值的策略。
unsaved-value (可选 - 默认是null): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和已经在先前的session中保存或装载的实例区分开来。(undefined指明使用标识属性值进行这种判断。)
<key-many-to-one name="propertyName" class="ClassName" column="column_name"/>
......
</composite-id>
5,
<discriminator
column="discriminator_column"
type="discriminator_type"
force="true|false"
/>
column (可选 - 默认为 class) 识别器字段的名字
type (可选 - 默认为 string) 一个Hibernate字段类型的名字
force(强制) (可选 - 默认为 false) "强制"Hibernate指定允许的识别器值,就算取得的所有实例都是根类的。
6,
<version
column="version_column"
name="propertyName"
type="typename"
access="field|property|ClassName"
unsaved-value="null|negative|undefined"
/>
column (可选 - 默认为属性名): 指定持有版本号的字段名。
name: 持久化类的属性名。
type (可选 - 默认是 integer): 版本号的类型。
access (可选 - 默认是 property): Hibernate用于访问属性值的策略。
unsaved-value (可选 - 默认是undefined): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和已经在先前的session中保存或装载的实例区分开来。(undefined指明使用标识属性值进行这种判断。)
版本号必须是以下类型:long, integer, short, timestamp或者calendar。
7,
<timestamp
column="timestamp_column"
name="propertyName"
access="field|property|ClassName"
unsaved-value="null|undefined"
/>
column (可选 - 默认为属性名): 持有时间戳的字段名。
name: 在持久化类中的JavaBeans风格的属性名,其Java类型是 Date 或者 Timestamp的。
access (可选 - 默认是 property): Hibernate用于访问属性值的策略。
unsaved-value (可选 - 默认是null): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和已经在先前的session中保存或装载的实例区分开来。(undefined指明使用标识属性值进行这种判断。)
注意,<timestamp> 和<version type="timestamp">是等价的。
8,
<property
name="propertyName"
column="column_name"
type="typename"
update="true|false"
insert="true|false"
formula="arbitrary SQL expression"
access="field|property|ClassName"
/>
name: 属性的名字,以小写字母开头。
column (可选 - 默认为属性名字): 对应的数据库字段名。
type (可选): 一个Hibernate类型的名字。
update, insert (可选 - 默认为 true) :表明在用于UPDATE 和/或 INSERT的SQL语句中是否包含这个字段。这二者如果都设置为false则表明这是一个“外源性(derived)”的属性,它的值来源于映射到同一个(或多个)字段的某些其他属性,或者通过一个trigger(触发器),或者其他程序。
formula (可选): 一个SQL表达式,定义了这个计算(computed) 属性的值。计算属性没有和它对应的数据库字段。
access (可选 - 默认值为 property): Hibernate用来访问属性值的策略。
9,
<many-to-one
name="propertyName"
column="column_name"
class="ClassName"
cascade="all|none|save-update|delete"
outer-join="true|false|auto"
update="true|false"
insert="true|false"
property-ref="propertyNameFromAssociatedClass"
access="field|property|ClassName"
/>
name: 属性名。
column (可选): 字段名。
class (可选 - 默认是通过反射得到属性类型): 关联的类的名字。
cascade(级联) (可选): 指明哪些操作会从父对象级联到关联的对象。
outer-join(外连接) (可选 - 默认为 自动): 当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。
update, insert (可选 - defaults to true) 指定对应的字段是否在用于UPDATE 和/或 INSERT的SQL语句中包含。如果二者都是false,则这是一个纯粹的“外源性(derived)”关联,它的值是通过映射到同一个(或多个)字段的某些其他属性得到的,或者通过trigger(除法器),或者是其他程序。
property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
access (可选 - 默认是 property): Hibernate用来访问属性的策略。
10,
<one-to-one
name="propertyName"
class="ClassName"
cascade="all|none|save-update|delete"
constrained="true|false"
outer-join="true|false|auto"
property-ref="propertyNameFromAssociatedClass"
access="field|property|ClassName"
/>
name: 属性的名字。
class (可选 - 默认是通过反射得到的属性类型):被关联的类的名字。
cascade(级联) (可选) 表明操作是否从父对象级联到被关联的对象。
constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序(也在schema export tool中被使用)。
outer-join(外连接) (可选 - 默认为 自动): 当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。
property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
access (可选 - 默认是 property): Hibernate用来访问属性的策略。
11,
<component
name="propertyName"
class="className"
insert="true|false"
upate="true|false"
access="field|property|ClassName">
<property ...../>
<many-to-one .... />
........
</component>
name: 属性名
class (可选 - 默认为通过反射得到的属性类型):组件(子)类的名字。
insert: 被映射的字段是否出现在SQL的INSERT语句中?
update: 被映射的字段是否出现在SQL的UPDATE语句中?
access (可选 - 默认是 property): Hibernate用来访问属性的策略。
12,
<subclass
name="ClassName"
discriminator-value="discriminator_value"
proxy="ProxyInterface"
lazy="true|false"
dynamic-update="true|false"
dynamic-insert="true|false">
<property
name="propertyName"
column="column_name"
type="typename"
update="true|false"
insert="true|false"
formula="arbitrary SQL expression"
access="field|property|ClassName"
/>
name: 属性的名字,以小写字母开头。
column (可选 - 默认为属性名字): 对应的数据库字段名。
type (可选): 一个Hibernate类型的名字。
update, insert (可选 - 默认为 true) :表明在用于UPDATE 和/或 INSERT的SQL语句中是否包含这个字段。这二者如果都设置为false则表明这是一个“外源性(derived)”的属性,它的值来源于映射到同一个(或多个)字段的某些其他属性,或者通过一个trigger(触发器),或者其他程序。
formula (可选): 一个SQL表达式,定义了这个计算(computed) 属性的值。计算属性没有和它对应的数据库字段。
access (可选 - 默认值为 property): Hibernate用来访问属性值的策略。
9,
<many-to-one
name="propertyName"
column="column_name"
class="ClassName"
cascade="all|none|save-update|delete"
outer-join="true|false|auto"
update="true|false"
insert="true|false"
property-ref="propertyNameFromAssociatedClass"
access="field|property|ClassName"
/>
name: 属性名。
column (可选): 字段名。
class (可选 - 默认是通过反射得到属性类型): 关联的类的名字。
cascade(级联) (可选): 指明哪些操作会从父对象级联到关联的对象。
outer-join(外连接) (可选 - 默认为 自动): 当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。
update, insert (可选 - defaults to true) 指定对应的字段是否在用于UPDATE 和/或 INSERT的SQL语句中包含。如果二者都是false,则这是一个纯粹的“外源性(derived)”关联,它的值是通过映射到同一个(或多个)字段的某些其他属性得到的,或者通过trigger(除法器),或者是其他程序。
property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
access (可选 - 默认是 property): Hibernate用来访问属性的策略。
10,
<one-to-one
name="propertyName"
class="ClassName"
cascade="all|none|save-update|delete"
constrained="true|false"
outer-join="true|false|auto"
property-ref="propertyNameFromAssociatedClass"
access="field|property|ClassName"
/>
name: 属性的名字。
class (可选 - 默认是通过反射得到的属性类型):被关联的类的名字。
cascade(级联) (可选) 表明操作是否从父对象级联到被关联的对象。
constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序(也在schema export tool中被使用)。
outer-join(外连接) (可选 - 默认为 自动): 当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。
property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
access (可选 - 默认是 property): Hibernate用来访问属性的策略。
11,
<component
name="propertyName"
class="className"
insert="true|false"
upate="true|false"
access="field|property|ClassName">
<property ...../>
<many-to-one .... />
........
</component>
name: 属性名
class (可选 - 默认为通过反射得到的属性类型):组件(子)类的名字。
insert: 被映射的字段是否出现在SQL的INSERT语句中?
update: 被映射的字段是否出现在SQL的UPDATE语句中?
access (可选 - 默认是 property): Hibernate用来访问属性的策略。
12,
<subclass
name="ClassName"
discriminator-value="discriminator_value"
proxy="ProxyInterface"
lazy="true|false"
dynamic-update="true|false"
dynamic-insert="true|false">
<property .... />
.....
</subclass>
name: 子类的全限定名。
discriminator-value(辨别标志) (可选 - 默认为类名):一个用于区分每个独立的子类的值。
proxy(代理) (可选): 指定一个类或者接口,在延迟装载时作为代理使用。
lazy(延迟装载) (可选): 设置lazy="true"是把自己的名字作为proxy接口的一种等价快捷方式。
13,
<joined-subclass
name="ClassName"
proxy="ProxyInterface"
lazy="true|false"
dynamic-update="true|false"
dynamic-insert="true|false">
.....
</subclass>
name: 子类的全限定名。
discriminator-value(辨别标志) (可选 - 默认为类名):一个用于区分每个独立的子类的值。
proxy(代理) (可选): 指定一个类或者接口,在延迟装载时作为代理使用。
lazy(延迟装载) (可选): 设置lazy="true"是把自己的名字作为proxy接口的一种等价快捷方式。
13,
<joined-subclass
name="ClassName"
proxy="ProxyInterface"
lazy="true|false"
dynamic-update="true|false"
dynamic-insert="true|false">
<key .... >
<property .... />
.....
</subclass>
name: 子类的全限定名。
proxy (可选): 指定一个类或者接口,在延迟装载时作为代理使用。
lazy(延迟装载) (可选): 设置lazy="true"是把自己的名字作为proxy接口的一种等价快捷方式。
.....
</subclass>
name: 子类的全限定名。
proxy (可选): 指定一个类或者接口,在延迟装载时作为代理使用。
lazy(延迟装载) (可选): 设置lazy="true"是把自己的名字作为proxy接口的一种等价快捷方式。