隨筆-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 閱讀(543) 評論(0)  編輯  收藏 所屬分類: hibernate/orm
          主站蜘蛛池模板: 泌阳县| 安图县| 松潘县| 永定县| 乌拉特中旗| 瑞金市| 德庆县| 仙游县| 亚东县| 渝北区| 浮梁县| 峨眉山市| 界首市| 德格县| 寻甸| 枣阳市| 浮山县| 商丘市| 沈丘县| 闸北区| 宁河县| 广西| 迁安市| 苏尼特左旗| 乐清市| 乾安县| 库伦旗| 柏乡县| 三台县| 大新县| 海盐县| 荔波县| 时尚| 句容市| 尖扎县| 大安市| 新兴县| 吉木萨尔县| 榕江县| 庆阳市| 鄂伦春自治旗|