随笔-124  评论-49  文章-56  trackbacks-0
hibernate基本映射
实体类------>表
实体类的设计原则:
  * 实现一个默认(无参)的构造方法(constructor)
  * 提供一个标识属性(identifier property)
  * 使用非final的类
  * 为持久化字段声明访问器(accessors),即get/set方法
实体类中的普通属性----->表字段
采用<class>标签映射成数据库表,通过<property>标签将普通属性映射成表字段
所谓普通属性不包括自定义类、集合和数组
注意:表或字段与sql关键字一样,必须重名称
<hibernate-mapping/>标签
<hibernate-mapping
         schema="schemaName"                                    (1)
         catalog="catalogName"                                     (2)
         default-cascade="cascade_style"                       (3)
         default-access="field|property|ClassName"        (4)
         default-lazy="true|false"                                     (5)
         *auto-import="true|false"                                  (6)
         *package="package.name"                               (7)
 />
(6) auto-import (可选 - 默认为 true): 指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
(7) package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。
<hibernate-mapping package="com.my.hibernate">
    
<class name="User">
        
<id name="id">
            
<generator class="uuid"/>
        
</id>
        
<property name="name"/>
        
<property name="password"/>
        
<property name="createTime"/>
        
<property name="expireTime"/>
    
</class>
</hibernate-mapping>
 
<class/>标签--表
<class
        *name="ClassName"                              (1)
        *table="tableName"                             (2)
        *discriminator-value="discriminator_value"     (3)
         mutable="true|false"                          (4)
         schema="owner"                                (5)
         catalog="catalog"                             (6)
         proxy="ProxyInterface"                        (7)
        *dynamic-update="true|false"                   (8)
        *dynamic-insert="true|false"                   (9)
         select-before-update="true|false"             (10)
         polymorphism="implicit|explicit"              (11)
         where="arbitrary sql where condition"         (12)
         persister="PersisterClass"                    (13)
        *batch-size="N"                                (14)
        *optimistic-lock="none|version|dirty|all"      (15)
        *lazy="true|false"                             (16)
         entity-name="EntityName"                      (17)
         check="arbitrary sql check condition"         (18)
         rowid="rowid"                                 (19)
         subselect="SQL expression"                    (20)
        *abstract="true|false"                         (21)
         node="element-name"
/>
(1) name (可选): 持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
(2) table (可选 - 默认是类的非全限定名): 对应的数据库表名。
(3) discriminator-value (可选 - 默认和类名一样): 一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括 null 和 not null。
(8) dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
(9) dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
(14) batch-size (可选,默认是1) 指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。
(15) optimistic-lock(乐观锁定) (可选,默认是version): 决定乐观锁定的策略。
(16) lazy (可选): 通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。
(21) abstract (可选): 用于在<union-subclass>的继承结构 (hierarchies)中标识抽象超类。
 

<id/>标签 -主键
主键生成策略:
uuid  native 和assigned
<id
        *name="propertyName"                                          (1)
        type="typename"                                              (2)
        *column="column_name"                                         (3)
        unsaved-value="null|any|none|undefined|id_value"             (4)
        access="field|property|ClassName"                            (5)
        node="element-name|@attribute-name|element/@attribute|.">
        *length                                                       (6)

        <generator class="generatorClass"/>
</id>
(1) name (可选): 标识属性的名字。
(2) type (可选): 标识Hibernate类型的名字。
(3) column (可选 - 默认为属性名): 主键字段的名字。
(4) unsaved-value (可选 - 默认为一个切合实际(sensible)的值): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。 这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注) 但未再次持久化的实例区分开来。
(5) access (可选 - 默认为property): Hibernate用来访问属性值的策略。
(6) 长度.

 
<generator/>生成唯一的标识
<id name="id" type="long" column="cat_id">
        <generator class="uuid">
        </generator>
</id>
identity
对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。
sequence
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
uuid
用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
native
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
assigned
让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。
foreign
使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。
 
<property/>生成字段
<property
        *name="propertyName"                                          (1)
        *column="column_name"                                         (2)
        type="typename"                                              (3)
        update="true|false"                                          (4)
        insert="true|false"                                          (4)
        formula="arbitrary SQL expression"                           (5)
        access="field|property|ClassName"                            (6)
        lazy="true|false"                                            (7)
        unique="true|false"                                          (8)
        not-null="true|false"                                        (9)
        optimistic-lock="true|false"                                 (10)
        generated="never|insert|always"                              (11)
        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 (可选 - 默认为属性名字): 对应的数据库字段名。 也可以通过嵌套的<column>元素指定。 
(4) update, insert (可选 - 默认为 true) : 表明用于UPDATE 和/或 INSERT 的SQL语句中是否包含这个被映射了的字段。这二者如果都设置为false 则表明这是一个“外源性(derived)”的属性,它的值来源于映射到同一个(或多个) 字段的某些其他属性,或者通过一个trigger(触发器)或其他程序生成。
(7) lazy (可选 - 默认为 false): 指定 指定实例变量第一次被访问时,这个属性是否延迟抓取(fetched lazily)( 需要运行时字节码增强)。
(8) unique (可选): 使用DDL为该字段添加唯一的约束。 同样,允许它作为property-ref引用的目标。
(9) not-null (可选): 使用DDL为该字段添加可否为空(nullability)的约束。

映射文件中一般类型中可以省略,其他不略
posted on 2009-11-03 15:35 junly 阅读(517) 评论(0)  编辑  收藏 所属分类: hibernate/orm

只有注册用户登录后才能发表评论。


网站导航: