Hibernate 配置文件詳解 一 (有點亂)

<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


6                           JAVA大對象類型的Hibernate映射類型
   映射類型             java類型                 標準SQL類型           MYSQL類型           ORALCE類型
   binary                byte[]                 VARBINARY(或BLOB)      BLOB                  BLOB
   text                  string                 CLOB                   TEXT                  CLOB
   serializable          實現Serializable       VARBINARY(或BLOB)      BLOB                  BLOB
                         接口任意一個java類
   clob                  java.sql.Clob          CLOB                   TEXT                  CLOB            
   blob                  java.sql.Blob          BLOB                   BLOB                  BLOB
   例:
a Session session=sessionFactory.openSession();
   Transaction tx=session.beginTransaction();
   Object obj=new Object();
   obj.setFile(Hibernate.createClob(" "));
   session.save(obj);
   session.flush();
   //鎖定這條紀錄
   session.refresh(obj,LocakMode.UPGRADE);
   oracle.sql.CLOB clob=(oracle.sql.CLOB)obj.getFile();
   //把長文本數據放入Clob中
   Writer pw=clob.getCharacterOutputStream();
   pw.write(longText);//longText標識長度超過255的字符串
   pw.close();
   tx.commit();
   session.close();

b InputStream in=this.getClass().getResourceAsStream("photo.gif");
   byte[] buffer=new byte[in.available()];
   in.read(buffer);
   set

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章