Hibernate 配置文件说明
1、<hibernate-mapping>
<hibernate-mapping
[schema="schemaName"]
[catalog="catalogName"]
[default-cascade="cascade_style"]
[default-access="field|property|ClassName"]
[default-lazy="true|false"]
[auto-import="true|false"]
[package="package.name"]
/>属性说明:
(1)schema:数据库schema的名称。
(2)catalog:数据库catalog的名称。
(3)default-cascade(默认为none):默认的级联风格。
(4)default-access(默认为property):Hibernate用来访问所有属性的策略。可以通过实现PropertyAccessor接口自定义。
(5)default-lazy(默认为true):指定了未明确注明lazy属性的Java属性和集合类,Hibernate会采取什么样的默认加载风格。
(6)auto-import(默认为true):指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
(7) package:指定一个包前缀,如果在映射文档中没有指定全限定的类名,就使用这个作为包名。2、<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="arbitrarysqlwherecondition"]
[persister="PersisterClass"]
[batch-size="N"]
[optimistic-lock="none|version|dirty|all"]
[lazy="true|false"]
[entity-name="EntityName"]
[check="arbitrarysqlcheckcondition"]
[rowid="rowid"]
[subselect="SQLexpression"]
[abstract="true|false"]
[node="element-name"]
/>
作用:定义一个持久化类
属性说明:
(1)name:持久化类(或者接口)的Java全限定名。如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
(2)table(默认是类的非全限定名):对应的数据库表名。
(3)discriminator-value(默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括null和notnull。
(4)mutable(默认值为true):表明该类的实例是可变的或者不可变的。
(5)schema:覆盖在根<hibernate-mapping>元素中指定的schema名字。
(6)catalog:覆盖在根<hibernate-mapping>元素中指定的catalog名字。
(7)proxy:指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。
(8)dynamic-update(默认为false):指定用于UPDATE的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
(9)dynamic-insert(默认为false):指定用于INSERT的SQL将会在运行时动态生成,并且只包含那些非空值字段。
(10)select-before-update(默认为false):指定Hibernate除非确定对象真正被修改了(如果该值为true-译注),否则不会执行SQLUPDATE操作。在特定场合(实际上,它只在一个瞬时对象(transientobject)关联到一个新的session中时执行的update()中生效),这说明Hibernate会在UPDATE之前执行一次额外的SQLSELECT操作,来决定是否应该执行UPDATE。
(11)polymorphism(多态,默认值为implicit(隐式)):界定是隐式还是显式的使用多态查询(这只在Hibernate的具体表继承策略中用到-译注)。
(12)where:指定一个附加的SQLWHERE条件,在抓取这个类的对象时会一直增加这个条件。
(13)persister:指定一个定制的ClassPersister。
(14)batch-size(默认是1)指定一个用于根据标识符(identifier)抓取实例时使用的"batchsize"(批次抓取数量)。
(15)optimistic-lock(乐观锁定,默认是version):决定乐观锁定的策略。
(16)lazy:通过设置lazy="false",所有的延迟加载(Lazyfetching)功能将被全部禁用(disabled)。
(17)entity-name(默认为类名):Hibernate3允许一个类进行多次映射(前提是映射到不同的表),并且允许使用Maps或XML代替Java层次的实体映射(也就是实现动态领域模型,不用写持久化类-译注)。
(18)check:这是一个SQL表达式,用于为自动生成的schema添加多行(multi-row)约束检查。
(19)rowid:Hibernate可以使用数据库支持的所谓的ROWIDs,例如:Oracle数据库,如果你设置这个可选的rowid,Hibernate可以使用额外的字段rowid实现快速更新。ROWID是这个功能实现的重点,它代表了一个存储元组(tuple)的物理位置。
(20)subselect:它将一个不可变(immutable)并且只读的实体映射到一个数据库的子查询中。当你想用视图代替一张基本表的时候,这是有用的,但最好不要这样做。更多的介绍请看下面内容。
(21) abstract: 用于在<union-subclass>的继承结构(hierarchies)中标识抽象超类。3、<id>
<id
[name="propertyName"]
[type="typename"]
[column="column_name"]
[unsaved-value="null|any|none|undefined|id_value"]
[access="field|property|ClassName"]
[length="L"]>
<generatorclass="generatorClass"/>
</id>
作用:定义主键字段的映射
属性说明:
(1)name:标识属性的名字。
(2)type:标识Hibernate类型的名字。(如果没配置,hibernate将会自动转化成相应的数据库类型)
(3)column(默认为属性名):主键字段的名字。
(4)unsaved-value(默认为一个切合实际(sensible)的值):一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注)但未再次持久化的实例区分开来。
(5)access(默认为property):Hibernate用来访问属性值的策略。
(6) length:指定长度4、<generator> 主键生成器
作用:用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者初始化参数,用<param>元素来传递。
<idname="id"type="long"column="cat_id">
<generatorclass="org.hibernate.id.TableHiLoGenerator">
<paramname="table">uid_table</param>
<paramname="column">next_hi_value_column</param>
</generator>
</id>
下面是一些内置生成器的快捷名字:
下面是一些内置生成器的快捷名字:
(1)increment:用于为long,short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。
(2)identity:对DB2,MySQL,MSSQLServer,Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long,short或者int类型的。
(3)sequence:在DB2,PostgreSQL,Oracle,SAPDB,McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long,short或者int类型的。
(4)hilo:使用一个高/低位算法高效的生成long,short或者int类型的标识符。给定一个表和字段(默认分别是hibernate_unique_key和next_hi)作为高位值的来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
(5)seqhilo:使用一个高/低位算法来高效的生成long,short或者int类型的标识符,给定一个数据库序列(sequence)的名字。
(6)uuid:用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
(7)guid:在MSSQLServer和MySQL中使用数据库生成的GUID字符串。
(8)native:根据底层数据库的能力选择identity,sequence或者hilo中的一个。
(9)assigned:让应用程序在save()之前为对象分配一个标示符。这是<generator>元素没有指定时的默认生成策略。手动分配主键的时候要设置成它
(10)select:通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。
(11) foreign:使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。5、<property>
<property
name="propertyName"
[column="column_name"]
[type="typename"]
[update="true|false"]
[insert="true|false"]
[formula="arbitrarySQLexpression"]
[access="field|property|ClassName"]
[lazy="true|false"]
[unique="true|false"]
[not-null="true|false"]
[optimistic-lock="true|false"]
[generated="never|insert|always"]
[node="element-name|@attribute-name|element/@attribute|"
[index="index_name"]
[unique_key="unique_key_id"]
[length="L"]
[precision="P"]
[scale="S"]
/>
作用:为类定义了一个持久化的属性。
属性如下:
(1)name:属性的名字,以小写字母开头。
(2)column(默认为属性名字):对应的数据库字段名。
(3)type:一个Hibernate类型的名字。
(4)update,insert(默认为true):表明用于UPDATE和/或INSERT的SQL语句中是否包含这个被映射了的字段。这二者如果都设置为false则表明这是一个“外源性(derived)”的属性,它的值来源于映射到同一个(或多个)字段的某些其他属性,或者通过一个trigger(触发器)或其他程序生成。
(5)formula:一个SQL表达式,定义了这个计算(computed)属性的值。计算属性没有和它对应的数据库字段。
(6)access(默认值为property):Hibernate用来访问属性值的策略。
(7)lazy(默认为false):指定指定实例变量第一次被访问时,这个属性是否延迟抓取(fetchedlazily)(需要运行时字节码增强)。
(8)unique:使用DDL为该字段添加唯一的约束。同样,允许它作为property-ref引用的目标。
(9)not-null:使用DDL为该字段添加可否为空(nullability)的约束。
(10)optimistic-lock(默认为true):指定这个属性在做更新时是否需要获得乐观锁定(optimisticlock)。换句话说,它决定这个属性发生脏数据时版本(version)的值是否增长。
(11) generated(默认为 never): 表明此属性值是否实际上是由数据库生成的。