Configuration:負(fù)債管理Hibernate的配置信息,Hibernate的入口
1、configure()方法默認(rèn)會(huì)在classpath下面尋找hibernatev.cfg.xml
2、支持帶參數(shù)的訪問,可以指定hbm.xml,如:
File file = new File(“d:\\cfg\\hibernate.xml”);
Configuration config = new Configuration().config(file);
Session的緩存:
1)、充當(dāng)蓄水池的作用,減少程序訪問數(shù)據(jù)庫的次數(shù)。
2)、保證緩存中的數(shù)據(jù)與數(shù)據(jù)庫同步,同步的具體情況看FlushMode是什么
清理緩存是指查看緩存中的數(shù)據(jù)與數(shù)據(jù)庫是否同步,不同步就發(fā)送更新語句
FlushMode.AUTO:Hibernate判斷對(duì)象屬性有沒有改變,是默認(rèn)的清理模式
FlushMode.COMMIT:在事務(wù)結(jié)束之前清理Session的緩存,其他任何時(shí)候都不清理緩存
FlushMode.NEVER:除非強(qiáng)制調(diào)用Session.flush(),或則永不清理緩存。所作的修改只限與內(nèi)存
FlushMode.ALWAYS:在每一個(gè)查詢語句前都調(diào)用flush()進(jìn)行緩存管理,這種模式經(jīng)常不必要并且低效的。
Hibernate定義并支持下列對(duì)象狀態(tài)(state):
· 瞬時(shí)(Transient) - 由new操作符創(chuàng)建,且尚未與Hibernate Session 關(guān)聯(lián)的對(duì)象被認(rèn)定為瞬時(shí)(Transient)的。瞬時(shí)(Transient)對(duì)象不會(huì)被持久化到數(shù)據(jù)庫中,也不會(huì)被賦予持久化標(biāo)識(shí)(identifier)。 如果瞬時(shí)(Transient)對(duì)象在程序中沒有被引用,它會(huì)被垃圾回收器(garbage collector)銷毀。 使用Hibernate Session可以將其變?yōu)槌志?span lang="EN-US">(Persistent)狀態(tài)。(Hibernate會(huì)自動(dòng)執(zhí)行必要的SQL語句)
· 持久(Persistent) - 持久(Persistent)的實(shí)例在數(shù)據(jù)庫中有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí)(identifier)。持久(Persistent)的實(shí)例可能是剛被保存的,或剛被加載的,無論哪一種,按定義,它存在于相關(guān)聯(lián)的Session作用范圍內(nèi)。 Hibernate會(huì)檢測(cè)到處于持久(Persistent)狀態(tài)的對(duì)象的任何改動(dòng),在當(dāng)前操作單元(unit of work)執(zhí)行完畢時(shí)將對(duì)象數(shù)據(jù)(state)與數(shù)據(jù)庫同步(synchronize)。 開發(fā)者不需要手動(dòng)執(zhí)行UPDATE。將對(duì)象從持久(Persistent)狀態(tài)變成瞬時(shí)(Transient)狀態(tài)同樣也不需要手動(dòng)執(zhí)行DELETE語句。
· 脫管(Detached) - 與持久(Persistent)對(duì)象關(guān)聯(lián)的Session被關(guān)閉后,對(duì)象就變?yōu)槊摴?span lang="EN-US">(Detached)的。 對(duì)脫管(Detached)對(duì)象的引用依然有效,對(duì)象可繼續(xù)被修改。脫管(Detached)對(duì)象如果重新關(guān)聯(lián)到某個(gè)新的Session上,會(huì)再次轉(zhuǎn)變?yōu)槌志?span lang="EN-US">(Persistent)的(在Detached其間的改動(dòng)將被持久化到數(shù)據(jù)庫)。 這個(gè)功能使得一種編程模型,即中間會(huì)給用戶思考時(shí)間(user think-time)的長(zhǎng)時(shí)間運(yùn)行的操作單元(unit of work)的編程模型成為可能。我們稱之為應(yīng)用程序事務(wù),即從用戶觀點(diǎn)看是一個(gè)操作單元(unit of work)。
立即檢索:
立即檢索的配置文件標(biāo)識(shí)符為lazy=”false”,表示Hibernate在數(shù)據(jù)庫中取得字段值組裝好一個(gè)對(duì)象后,會(huì)立即再從數(shù)據(jù)庫此對(duì)象多關(guān)聯(lián)的對(duì)象,如果這個(gè)關(guān)聯(lián)的對(duì)象還有關(guān)聯(lián)對(duì)象,則再組裝此關(guān)聯(lián)對(duì)象。
一對(duì)多和多對(duì)一關(guān)聯(lián)對(duì)象則不適合立即檢索。
延遲檢索:
立即檢索的配置文件標(biāo)識(shí)符為lazy=”true”,就是需要用到時(shí)才會(huì)去去被關(guān)聯(lián)的對(duì)象。
預(yù)先抓取指的是Hibernate通過select語句使用outer join來獲得對(duì)象的關(guān)聯(lián)實(shí)例或者關(guān)聯(lián)集合。
Hibernate2.x版本:outer-join=”true”;
Hibernate3.x版本:fetch=”join”;
<one-to-one name="cer" class="com.kissjava.Certificate" fetch="join" cascade="all"></one-to-one>(1)
<many-to-one name="team" column="team_id" class="com.kissjava.Team" fetch="join"></many-to-one>(2)
(1)一個(gè)一對(duì)一關(guān)聯(lián)的對(duì)象屬性,名為cer,在得到Student對(duì)象時(shí),采用預(yù)先抓取得到cer對(duì)象,并且級(jí)聯(lián)為all,說明Student的增加、刪除及修改操作都會(huì)影響到cer對(duì)象。
(2)一個(gè)多對(duì)一關(guān)聯(lián)的對(duì)象屬性,名為team,在Student表中通過team_id與team對(duì)象發(fā)生關(guān)聯(lián),team的實(shí)體類是Team,在取得Student實(shí)例時(shí),使用預(yù)先抓取得到team對(duì)象。