Hibernate映射文件属性说明

一、<hibernate-mapping ...>
1.default-cascade:设置级联风格,默认none。当配置Java属性映射、集合映射时,可指定cascade属性,如果没有指定,则采用此处指定的级联风格;
2.default-lazy:设置延迟加载策略,默认true。当配置Java属性映射、集合映射时,可指定lazy属性,如果没有指定,则采用此处指定的lazy属性(通常不建议关闭,比如一个Teacher对象关联N个Student对象,如关闭延迟加载,则hibernate在加载Teacher对象时会自动加载所以的Student对象,如果程序只需访问Teacher对象,加载Student对象纯属多余);
3.default-access:设置属性访问策略,默认property,即采用getter/setter方法来访问属性,如指定access=“field”,则通过反射来访问成员变量
4.auto-import:设置能否使用非全限定的类名,默认true,仅限于本映射文件的类(如果一份映射文件中有2个类名相同的持久化映射,处于不同包结构下,全限定类名不同,依然是两个不同的类,此时应设置auto-import=“false”,否则hibernate无法区分);
5.package:指定一个包前缀,如果映射文件中没有指定全限定的类名,则默认使用该前缀;
6.schema:指定所映射数据库的schema名;
7.catalog:指定所映射数据库的catalog名;

二、<class ...>
1.table:指定持久化类映射的表名;
2.discriminator-value:指定区分不同子类的值,当使用<subclass...>元素来定义持久化类的继承关系映射时需要使用该属性;
3.mutable:指定持久化类的实例是可变对象还是不可变对象,值是true或false;
4.proxy:指定一个接口,在延迟装载是作为代理使用;
5.dynamic-update:指定update语句是否在运行时动态生成,并且只更新那些改变过的字段,默认是false;(当打开dynamic-update之后,映射文件可指定这几种乐观锁定的策略[version、all、dirty、none],建议使用version)
6.dynamic-insert:指定insert语句是否在运行时动态生成,并且只插入那些非空字段,默认是false;
7.select-before-update:指定update之前是否需要进行select,默认false;开启后会降低性能,如果对象的状态经常改变,建议设置为false;
8.polymorphism:当采用<union-subclass ...>元素来配置继承映射时,该元素指定是否需要采用隐式多态查询,默认值implicit;
9.where:指定一个附件的sql语句过滤条件;
10.persister:指定一个定制的ClassPersister,通常无需制定该属性;
11.batch-size:指定根据标识符(identifier)来抓取实例时每批抓取的实例数,默认是1;
12.optimistic-lock:指定乐观锁定策略,默认是version;
13.check:指定一个sql表达式,用于为该持久化类所对应的表指定一个多行的Check约束;
14.subselect:用于映射不可变的、只读实体;

三、<id ...>
1.<id ...>用来指定持久化类的标识属性;
2.name:标识属性名;
3.type:数据类型;
4.column:数据列的列名;
5.unsaved-value:指定当某个实例刚创建,还未保存时的标识属性值。区分那种以前的Session装载过,但未再次持久化的实例;
6.access:覆盖<hibernate-mapping ...>中的default-access;

四、主键生成器
1.increment
2.identity
3.sequence
4.hilo
5.seqhilo
6.uuid
7.guid
8.native
9.assigned
10.select
11.foreign

五、<property...>
1.<property ...>用来指定持久化类的普通属性;
2.name:普通属性名;
3.type:数据类型,可以是Integer、String、date、timestamp、float、binary、charactor、object等,可以是一个可序列化的Java类的类名,可以是用户自定义的类名;
4.update、insert:用于设置生成的update或insert语句中是否需要包含该字段,默认是true;
5.formula:指定一个sql表达式,指定该属性的值将根据表达式来计算,计算属性没有和它对应的数据列;
6.lazy:是否延迟加载,默认是false;
7.unique:是否为数据列添加唯一约束;
8.not-null:是否为数据列添加not-null约束;
9.optimistic-lock:设置该属性在更新时是否需要使用乐观锁定,默认true;
10.generated:设置该属性映射的数据列的值是否由数据库生成,该属性可接受never(不由数据库生成)、insert(insert时生成,不会在随后的update时重新生成)、always(在insert和update时都会被重新生成)
11.index:指定一个字符串的索引名称,当hibernate自动建表时,用于为该属性所映射的数据列创建索引,从而加速基于该数据列的查询;
12.unique_key:指定一个唯一键的名称;当hibernate自动建表时,用于为该属性所映射的数据列创建唯一索引,只有当该数据列具有唯一约束时才有效;
13.length:数据列的字段长度;
14.precision:指定该属性所映射数据列的有效数字位的位数;
15.scale:指定该属性所映射数据列的小数位数;

六、其他
1.class元素也可指定lazy、schema、catalog等属性,用于覆盖hibernate-mapping中指定的默认行为;
2.<hibernate-mapping ...>中可包含多个<class ...>,但通常的做法是一个持久化类对应一个映射文件;
3.<class ...>中可增加<subclass ...>、<joined-subclass ...>、<union-subclass ...>,这些元素用于定义子类;

七、样例

<?xml version="1.0" encoding="gb2312"?>
<!-- 指定Hiberante3映射文件的DTD信息 -->
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hibernate-mapping是映射文件的根元素 -->
<hibernate-mapping package="persistence" schema="ad" >
 <!-- 每个class元素对应一个持久化对象 -->
 <class name="News" table="news_table">
  <!-- id元素定义持久化类的标识属性 -->
  <id name="id" >
   <!-- 指定主键生成策略 -->
   <generator class="identity"/>
  </id>
  <!-- property元素定义常规属性 -->
  <property name="title"/>
  <property name="content"/>
 </class>
</hibernate-mapping>

猜你喜欢

转载自margaret0071.iteye.com/blog/2341829