天天看點

Hibernate配置檔案詳解(1)

<meta>元素的屬性

        屬性                                                描述

    class-description                            指定描述類的javaDoc

    field-description                            指定描述類的屬性javaDoc

    interface                                    如果為true,表明生成接口而非類,預設false

    implements                                   指定類所實作的接口

    extends                                      指定繼承的父類名

    generated-class                              重新指定生成的類名

    scope-class                                  指定類的修飾符,預設public

    scope-set                                    指定set方法的修飾符,預設public

    scope-get                                    指定get方法的修飾符,預設public

    scope-field                                  指定類的屬性的修飾符,預設private

    use-in-toString                              如果為true,表示在toString()方法中包含此屬性

    gen-property                                 如果為false,不會在java類中生成此屬性,預設true

    finder-method                                指定find方法名

<column>元素屬性

    name                 設定字段名字

    length               設定字段長度

    not-null             如為true,指名該字段不允許為null,預設false

    unique               如為true,指名該字段具有唯一限制,預設false

    index                給一個或多個字段建立索引

    unique-key           為多個字段設定唯一限制

    foreign-key          為外鍵限制命名,在<many-to-many><one-to-one><key><many-to-one>元素中包含

                         foreign-key屬性,在雙向關聯中,inverse屬性為true的一端不能設定foreign-key

    sql-type             設定字段sql類型

    check                設定sql檢查限制

用于控制insert or update 語句的映射屬性

<property>元素的insert屬性                  如為false,在insert中不包含該字段,預設為true

<property>元素的update屬性                  如為false,在update中不包含該字段,預設為true

<class>元素的mutable屬性                    如為false,等價于所有字段的update屬性為false,預設為true

<property>元素的dunameic-insert屬性         如為true,表明動态生成insert語句,隻有不為null,才會包含insert語句中,預設false

<property>元素的dunameic-update屬性         如為true,表明動态生成update語句,隻有不為null,才會包含insert語句中,預設false

<class>元素的dunameic-insert屬性            如為true,表明等價于所有字段動态生成insert語句,隻有不為null,才會包含insert語句中                                               ,預設false

<class>元素的dunameic-update屬性            如為true,表明等價于所有字段動态生成update語句,隻有不為null,才會包含insert語句中                             ,預設false

Hibernate提供的内置辨別符生成器

    increment       适用于代理主鍵,自動遞增,增1(隻能是long,int,short)

    identity        适用于代理主鍵,底層資料庫自動增長字段類型(資料庫需支援,隻能是long,int,short)

(oralce)sequence    适用于代理主鍵,根據底層資料庫的序列來生成辨別符(資料庫支援序列,隻能是long,int,short)

    hilo            适用于代理主鍵,根據high/low算法來生成.Hibernate把特定表的字段作為high值,在預設情況下選用hibernate_unique_key表的next_hi字段

(mysql,mssql)native 适用于代理主鍵,根據資料庫自動生成辨別符支援能力,來選擇identity,sequence,hilo

    uuid.hex        适用于代理主鍵,采用128位UUID(universal unique identification)算法來生成辨別.此算法能在網絡環境中生成唯一的字元串辨別符,

                   (不建議使用,字元串類型比整形類型的主鍵占用更多的空間)

    assigned        适用于自然主鍵,由java程式負責生成.

<hibernate-mapping>

<class name="項目路徑" table="庫中對應表名" schema="dbo" catalog="netoa">

      <meta attribute="class-description">指定描述類的javaDoc</meta>

      <meta attribute="class-scope">指名類的修飾類型</meta>

      <meta attribute="extends">指定繼承類</meta>

         <id name="bgrkbh" type="long">

            <column name="BGRKBH" precision="15" scale="0" sql-type="庫中類型" check="BGRKBH>10"/>

            <meta attribute="scope-set">指定類,類屬性的getxxx(),setxxx()方法的修飾符

             包括:static,final,abstract,public,protected,private

            </meta>

            <generator class="assigned" />

        </id>

         <property name="Class.fileName" type="long">

                <column name="YSLX" precision="精度" scale="刻度" not-null="預設false" sql-type="資料庫中類型"/>

                附加屬性不會影響Hibernate的運作行為

                <meta attribute="field-description">指定描述類的javaDoc</meta>

                指定描述類屬性的javaDoc

         </property>

</class>

</hibernate-mapping>

注意:

1 Session的commit()和flush()方法的差別,flush()方法進行清理緩存的操作,執行一系列的SQL語句,但不會送出事務;

commit()方法會先調用flush(),然後送出事務.送出事務意味着對資料庫所作的更新被永久儲存下來.

2 Session的setFlushMode()方法用于設定清理緩存的時間點.FlushMode類定義了三種不同的清理模式

清理緩存的模式        Session的查詢方法                Session的commit()方法       Session的flush()方法

FlushMode.AUTO           清理                                  清理                                   清理  

FlushMode.COMMIT         不清理                             清理                                 清理  

FlushMode.NEVER          不清理                             不清理                               清理

3 Hibernate應用中java對象的狀态

臨時狀态 (transient):剛剛用new語句建立,還沒被持久化,不處與Session的緩存中,處于臨時狀态的java對象被稱為臨時對象.

持久化狀态(persistent):已經被持久化,加入session的緩存中.處于持久化狀态的java對象被稱為持久化對象.

遊離狀态(detached):已經被持久化,但不在處于session的緩存中.處于遊離狀态的java對象被稱為遊離對象.

(注意:::::)持久化類與持久化對象是不同的概念.持久化類的執行個體可以處于臨時狀态,持久化狀态和遊離狀态.其中處于

           持久化狀态的執行個體 被稱為持久化狀态.

臨時對象的特性:

1 不處于緩存中,也可以說,不被任何一個Session執行個體關聯

2 在資料中沒有對應的紀錄.

在此情況下,java對象進入臨時狀态

1 當通過new建立一個對象時,此時不和資料庫中的任何紀錄的

ex:對象的狀态轉化過程

程式代碼                                                            對象的生命周期               對象的狀态

tx=session.beginTransaction();

Object obj=new Object("tow",new HashSet());      開始生命周期                臨時狀态

session.save(obj);                                                  處于生命周期              轉化為持久狀态

Long id=obj.getId();

obj=null;

Object obj2=(Object)session.load(Object.class,id); 處于生命周期             處于持久化狀态

tx.commit();                                                         

session.close();                                                    處于生命周期              轉變成遊離狀态

System.out.print(obj2.getName());                         處于生命周期               處于遊離狀态

obj2=null;                                                              結束生命周期               結束生命周期

4 cascade屬性

    cascade屬性值                                             描述

     none                                    在儲存更新時,忽略其他關聯對象,他是cascade預設屬性

     save-update                             當通過Session的save(),update()以及saveOrUpdate()方法來儲存

                                             或更新目前對象時,及聯儲存所有關聯的建立的臨時對象,并且及聯更新所有關聯的遊離對象

     delete                                  當通過session的delete()方法删除目前對象時,及聯删除所有對象

     all                                     包含save-update及delete行為,此外對目前對象執行evict()或lock

                                             ()操作時,也會對所有關聯的持久化對象執行evict()或lock()操作

     delete-orphan                           删除所有和目前對象解除關聯關系的對象

     all-delete-orphan                       包含all和delete-orphan

5    Hibernate映射類型,對應的java基本類型及對應的标準SQL類型

      Hibernate 映射類型               java類型                     标準SQL類型

       integer或者int                  int                                INTEGER

       long                            long                                  BIGINT

       short                           short                               SMALLINT

       byte                            byte                                TINYINT

       float                           float                                   FLOAT

       double                          double                              DOUBLE

       big_decimal                     java.math.BigDecimal         NUMERIC

       character                       char and string              CHAR

       string                          string                                VARCHAR

       boolean                         boolean                       BIT

     Hibernate映射類型,對應的java時間和日期類型及對應的标準SQL類型

     映射類型           java類型                          标準SQL類型             描述

      date       java.util.Date或者java.sql.Date        DATE         代表日期,YYYY-MM-DD

      time       java.util.Date或者java.sql.Date        TIME         代表時間,形式為HH:MM:SS

      timestamp java.util.Date或者java.sql.Timestamp   TIMESTAMP    代表日期和時間,YYYYMMDDHHMMSS

      calendar   java.util.Calendar                     TIMESTAMP    同上

   calendar_date java.util.Calendar                     DATE         代表日期,YYYY-MM-DD