有才華的人,別忘記給滋潤你的那塊土壤施肥

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            28 隨筆 :: 5 文章 :: 147 評論 :: 0 Trackbacks
           Configuration:負債管理Hibernate的配置信息,Hibernate的入口

          1、configure()方法默認會在classpath下面尋找hibernatev.cfg.xml

          2、支持帶參數(shù)的訪問,可以指定hbm.xml,如:

          File file = new File(“d:\\cfg\\hibernate.xml”);

          Configuration config = new Configuration().config(file);

          Session的緩存:

          1)、充當蓄水池的作用,減少程序訪問數(shù)據(jù)庫的次數(shù)。

          2)、保證緩存中的數(shù)據(jù)與數(shù)據(jù)庫同步,同步的具體情況看FlushMode是什么

          清理緩存是指查看緩存中的數(shù)據(jù)與數(shù)據(jù)庫是否同步,不同步就發(fā)送更新語句

          FlushMode.AUTOHibernate判斷對象屬性有沒有改變,是默認的清理模式

          FlushMode.COMMIT:在事務(wù)結(jié)束之前清理Session的緩存,其他任何時候都不清理緩存

          FlushMode.NEVER:除非強制調(diào)用Session.flush(),或則永不清理緩存。所作的修改只限與內(nèi)存

          FlushMode.ALWAYS:在每一個查詢語句前都調(diào)用flush()進行緩存管理,這種模式經(jīng)常不必要并且低效的。

          Hibernate定義并支持下列對象狀態(tài)(state):

          ·         瞬時(Transient) - new操作符創(chuàng)建,且尚未與Hibernate Session 關(guān)聯(lián)的對象被認定為瞬時(Transient)的。瞬時(Transient)對象不會被持久化到數(shù)據(jù)庫中,也不會被賦予持久化標識(identifier)。 如果瞬時(Transient)對象在程序中沒有被引用,它會被垃圾回收器(garbage collector)銷毀。 使用Hibernate Session可以將其變?yōu)槌志?span lang="EN-US">(Persistent)狀態(tài)。(Hibernate會自動執(zhí)行必要的SQL語句)

          ·         持久(Persistent) - 持久(Persistent)的實例在數(shù)據(jù)庫中有對應(yīng)的記錄,并擁有一個持久化標識(identifier)。持久(Persistent)的實例可能是剛被保存的,或剛被加載的,無論哪一種,按定義,它存在于相關(guān)聯(lián)的Session作用范圍內(nèi)。 Hibernate會檢測到處于持久(Persistent)狀態(tài)的對象的任何改動,在當前操作單元(unit of work)執(zhí)行完畢時將對象數(shù)據(jù)(state)與數(shù)據(jù)庫同步(synchronize)。 開發(fā)者不需要手動執(zhí)行UPDATE。將對象從持久(Persistent)狀態(tài)變成瞬時(Transient)狀態(tài)同樣也不需要手動執(zhí)行DELETE語句。

          ·         脫管(Detached) - 與持久(Persistent)對象關(guān)聯(lián)的Session被關(guān)閉后,對象就變?yōu)槊摴?span lang="EN-US">(Detached)的。 對脫管(Detached)對象的引用依然有效,對象可繼續(xù)被修改。脫管(Detached)對象如果重新關(guān)聯(lián)到某個新的Session上,會再次轉(zhuǎn)變?yōu)槌志?span lang="EN-US">(Persistent)的(Detached其間的改動將被持久化到數(shù)據(jù)庫)。 這個功能使得一種編程模型,即中間會給用戶思考時間(user think-time)的長時間運行的操作單元(unit of work)的編程模型成為可能。我們稱之為應(yīng)用程序事務(wù),即從用戶觀點看是一個操作單元(unit of work)

          立即檢索:

                   立即檢索的配置文件標識符為lazy=”false”,表示Hibernate在數(shù)據(jù)庫中取得字段值組裝好一個對象后,會立即再從數(shù)據(jù)庫此對象多關(guān)聯(lián)的對象,如果這個關(guān)聯(lián)的對象還有關(guān)聯(lián)對象,則再組裝此關(guān)聯(lián)對象。

                    一對多和多對一關(guān)聯(lián)對象則不適合立即檢索。

          延遲檢索:

                立即檢索的配置文件標識符為lazy=”true”,就是需要用到時才會去去被關(guān)聯(lián)的對象。

          預(yù)先抓取指的是Hibernate通過select語句使用outer join來獲得對象的關(guān)聯(lián)實例或者關(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)一個一對一關(guān)聯(lián)的對象屬性,名為cer,在得到Student對象時,采用預(yù)先抓取得到cer對象,并且級聯(lián)為all,說明Student的增加、刪除及修改操作都會影響到cer對象。

          2)一個多對一關(guān)聯(lián)的對象屬性,名為team,在Student表中通過team_idteam對象發(fā)生關(guān)聯(lián),team的實體類是Team,在取得Student實例時,使用預(yù)先抓取得到team對象。

          posted on 2008-04-10 08:49 kissjava 閱讀(879) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 嘉义县| 驻马店市| 齐齐哈尔市| 武川县| 巢湖市| 新龙县| 江门市| 法库县| 长寿区| 临汾市| 乌鲁木齐县| 云霄县| 丰宁| 南昌县| 县级市| 五河县| 怀远县| 城口县| 邓州市| 嵩明县| 大悟县| 建阳市| 双桥区| 宁陵县| 高雄县| 丁青县| 咸宁市| 厦门市| 静海县| 凤凰县| 平顶山市| 和龙市| 金秀| 南召县| 柏乡县| 虞城县| 灵川县| 泾川县| 福安市| 潼南县| 聂拉木县|