[Original]Hibernate持久與游離
在Hbibernate中有自己的一套機制:FlushMode,它控制著持久化對象與數(shù)據(jù)庫的關系。FlushMode有四種狀態(tài):NERVER、AUTO、COMMIT和ALWAYS。默認值為AUTO。Spring中使用Hibernate時,會將FlushMode初始化為AUTO,不過在使用OpenSessionInViewFilter(Spring有自己的一個transcation,不過它只是作用在service層,如果想使持久化對象保留到view層,那么啟用這個過濾器之后就可以了)過濾器之后,Spring會將FlushMode設置為NERVER(表示持久化對象不在于數(shù)據(jù)庫中數(shù)據(jù)實時關聯(lián))。不知道大家在工程中是否用到了spring提供的事務,在用到spring提供的HibernateTranscationManager管理事務時。當調(diào)用的方法位于該管理器之下時,spring會臨時的將FlushMode修改為AUTO狀態(tài),這樣如果你在view層有一個持久化對象,并且修改了這個持久化對象的狀態(tài),spring會自動將這個持久化對象的狀態(tài)更新到數(shù)據(jù)庫中去。這樣可能會帶來困惑:明明沒有更新數(shù)據(jù)庫,怎么數(shù)據(jù)庫中的值發(fā)生改變了呢?其實這也是持久層的意義所在:持久是將數(shù)據(jù)保存在持久層中的對象上,并使對象與數(shù)據(jù)是一致的,如果持久化對象狀態(tài)發(fā)生改變,成為了游離態(tài),類似用jdbc取出Object之后close了connection,這樣對象與數(shù)據(jù)庫就脫離了,也就是游離。歡迎大家來拍磚^_^
posted on 2008-01-09 13:28 牛浪de流 閱讀(391) 評論(0) 編輯 收藏 所屬分類: Framework