經典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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章