Hibernate Mapping Declaration——之 一

来源:互联网 发布:java maven 配置 编辑:程序博客网 时间:2024/05/29 15:08


1.hibernate-mapping

<hibernate-mapping schema="schemaName" catalog="catalogName" default-cascade="cascade_style 
                   defualt-access="field|property|ClassName"  default-lazy="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="arbitray 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"/>

(1)name(可选) :持久化类(或者接口)的Java全限定名。如果这个属性不存在,Hibernate将假定这个事一个非POJO的实体映射。

(2)table(可选-默认是累的非全限定名) :对应的数据库表名。

(3)discriminator-value(可选-默认和类名一样) :一个用于区分不同子类的值,在多态行为时使用。它可以接受的值包括null和not null。

(4)mutable(可选,默认值为true) :表明该类的实例是可变的或者不可变的。

(5)schema(可选):覆盖在根<hibernate-mapping>元素中指定的schema名字。

(6)catalog(可选) :覆盖在根<hibernate-mapping>元素中指定的catalog名字。

(7)proxy(可选) :制定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。

(8)dynamic-update(可选,默认为false) :指定用于UPDATE的SQL将会在运行时动态生成,并且只更新那些改过的字段。如果打开了dynamic-update,可以选择几种乐观锁定的策略: version 检查version/timestamp字段   all  检查全部字段    dirty  只检查修改过的字段          none     不使用乐观锁定

(9)dynamic-insert(可选,默认为false) :指定用于INSERT的SQL将会在运行时动态生成,并且只包含那些非空字段。

(10)select-before-update(可选,默认为false) :指定Hibernate除非确定对象真正被修改过了(如果该值为true),否则不会执行SQL UPDATE操作。在特定场合(实际上,它只在一个瞬时对象(transient object)关联到一个新的Session中时执行的update()中生效),这说明Hibernate会在UPDATE之前执行一次额外的SQLSELECT操作,来决定是否应该执行UPDATE。

(11)polymorphism(多态)(可选,默认值为implicit(隐式)) :界定是隐式还是显示的使用多态查询(这只在Hibernate的具体表继承策略中用到)。

(12)where(可选) :指定一个附加的SQLWhere条件,在抓取这个类的对象时会一直增加这个条件。

(13)persister(可选) :指定一个定制的ClassPersister。

(14)optimistic-lock(乐观锁)(可选,默认是version) :决定乐观锁定的策略。

(15)batch-size(可选,默认是1) :指定一个用于根据标识符(identifier)抓取实例使用的"batch size"(批次抓取数量)。

(16)lazy(可选) :通过设置lazy="false",所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。

(17)entity-name(可选,默认为类名) :Hibernate3允许一个类进行多次映射(前提是映射到不同的表),并且允许Maps或XML代替Java层次的实体映射(也就是实现动态领域模式,不用写持久化类)。

(18)check(可选) :这是一个SQL表达式,用于为自动生成的Schema添加多行(muti-row)约束检查。

(19)rowid(可选) :Hibernate可以使用数据库支持的所谓的ROWIDs。ROWID是这个功能实现的重点,它代表了一个存储元组(tuple)的物理位置。

(20)subselect(可选) :它将一个不可变(immutable)并且只读的实体映射到一个数据库的子查询中。

(21)abstract(可选) :用于<union-subclass>的继承结构(hiberarchies)中标识抽象超类。


3.id

<id    name="propertyName"    type="typename"         column="colunm_name"    unsaved-value="null|any|none|undefined|id_value"          access="field|property|ClassName"            node="element-name|@attribute-name|element-@attribute|.">        <generator class="genteratorClass"/></id>

(1)name(可选) :标识属性的名字。

(2)type(可选) :标识Hibernate类型的名字。

(3)colunm(可选-默认为属性名):主键字段的名字。

(4)unsaved-value(可选-默认为一个切合实际(sensible)的值) :一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和以前的session中装载过(可能又做过修改)但未再次持久化的实例区分开来。

(5)access(可选-默认为property) :Hibernate用来访问属性值得策略。

3.1generator

<id    name="id"    type="long"    column="colunmName">         <generator class="package.className">                   <param name="paramName">value</param>                    <param name="column">value</param>           </generator></id
所有生成器都是想org.hiberante.id.IdentifierGenerator接口。

一些内置生成器的快捷名字:
increment

                  用于为long,short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。

identity

                  对DB2,MySQL,MS SQL Server,Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long,short或者int类型的。

sequence

                  在DB2,PostgreSQL,Oracle,SAP DB,McKoi中使用序列(sequence),而在Interbase中使用生成 器(generator)。返回的标识符是long,short或者int类型的。

hilo

                  使用一个高/低位算法高效的生成long,short或者int类型的标识符。给定一个表和字段(默认分别是hibernate_unique_key和next_hi)作为高位值的来源。高/低位算法生成标识符只在一个特定的数据库中时唯一的。

seqhilo

                  使用一个高/低位算法来高效的生成long,short,或者int类型的标识符,给定一个数据库序列(sequence)的名字。

uuid 

                  用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中时唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。

guid 

                  在MS SQL Server 和MySQL 中使用数据库生成的GUID字符串。

native 

                   根据底层数据库的能力选择identity,sequence或者hilo中的一个。

assigned

                  让应用程序在save()之前为对象分配一个标示符。这是<generator>元素没有指定时的默认生成策略。

select

                  通过数据库出发器选择一些唯一主键的行并返回主键值来分配一个主键。

foreign

                  使用另外一个相关联的对象的标识符。通常和<one-to-one>l联合起来使用。


4.discriminator

<discriminator  column="discriminator_colunm"  type="discirminator_type"                          force="true|false"  force="true|false"                        insert="true|false"  formula="arbitrary sql expression" />   
(1)column(可选-默认为class) : 鉴别器字段的名字

(2)type(可选-默认为String) :一个HIbernate字段类型的名字

(3)force(可选-默认为false) :"强制"Hiberante指定允许的鉴别器值,即使当取得的所有实例都是根类的

(4)insert(可选-默认为true) :如果你的鉴别器字段也是映射为符合标识的一部分,则需要这个值设为false

(5)formula(可选)一个SQL表达式,在类型判断(判断是父类还是具体子类)时执行。可用于基于内容的鉴别器。




0 0