從Hibernate2到3移植的兩點初體驗

來源:互聯網
上載者:User

H3提供了很多令人興奮的特性,從RC1提供download開始便在機器上建立了新的H3test project,由於時間問題,H3的E文doc也只看到第五章節(都是列印A4紙閱讀的,飯前廁中枕邊 苦~),而且一直到前天才開始正式代碼移植...

這兩天感受並不多,本來沒想發到javaeye,但是關於H3的lazy機制,覺得還是有點費解,並不是機制本身,而是其進行如此大的變動的目的

從H2到H3,在下目前接觸到的只有兩點比較重要(包名更改比較容易,批量替換吧): 1.session interface API的變更 find/iterate 等一些method在H3中已經不再支援 但是在org.hibernate.classic.Session這個介面還是為使用者提供了以上的method,但是我想classic也不是長久之策,呵呵,以Gavin的觀點,所有的query操作,createQuery()才是王道

2.Lazy機制,這個就比較迷茫的... 看看測試代碼先 java代碼: 

HBM檔案: <hibernate-mapping package="h3test.example.db.PO">     <class name="UserPO" table="users" >         <id name="id"             type="long"                                    column="ID">             <generator class="increment"/>         </id>

        <property name="name" type="string"/>         <property name="nickname" type="string"/>                        <property name="vip" column="isVIP" type="boolean"/>     </class>    </hibernate-mapping>

代碼 UserPO u=(UserPO)op.getSession().load(UserPO.class,new Long(3));     op.close();     System.out.println(u.getName());

 

以上代碼在H3會得到LazyInitializationException錯誤,也就是說,在H3裡,session.close()之前,如果未對PO進行操作,那麼PO實際上只是proxy,It's so interesting,由於沒有對H3有很深的理解,在下花了很長時間,最後在hibernate的論壇中找到了以上答案,對於H3為什麼採用這種新的Lazy機制,目前 還不敢亂下結論 但看到Gavin 對使用者釋疑時這樣說:

Stop arguing with me, and obey the migration guide!

想來應該有一定道理的(還是文檔看的少,時間啊時間- -!)

也許你還是懷念H2中的一次性load出PO而不是proxy,那麼在hbm檔案中的class 中聲明lazy="false"來實現,請注意這是H3中新的屬性設定,而且它的預設值是"lazy="true"";或者採用控制session生命週期的方法,把它交給filter來控制,兩種方法只是個人拙見,希望各位指正

嗯,關於Lazy問題在Hibernate官方論壇的文章 http://forum.hibernate.org/viewtopic.php?t=939532&postdays=0&postorder=asc&start=0

Hibernate3 Migration Guide 持續更新的,H2->H3使用者必看,可惜為什麼等我都找到答案才發現這個頁面呢?sigh http://www.hibernate.org/Documentation/Hibernate3MigrationGuide#A7


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。