天天看點

經典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

本文轉自yunlielai51CTO部落格,原文連結:http://blog.51cto.com/4925054/1117724,如需轉載請自行聯系原作者