| 導購 | 订阅 | 在线投稿
分享
 
 
 

Hibernate學習筆記(七)--操縱持久化對象

2007-03-16 11:16:03  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  一、Session在什麽情況下清理緩存?
  答:
  1、當應用程序調用Transaction.Commit()方法的時候,先清理緩存,然後再向數據庫提交事務。
  2、當應用程序調用Session.Find()或者Iterate()方法時,如果緩存中的持久化對象的屬性發
   生了變化,就會先清理緩存,以保證查詢的結果能反映持久化對象的最新狀態。
  3、當應用程序顯式調用Session.Flush()方法的時候。
  注意:Session進行清理緩存的例外情況是,如果對象使用native生成器來生成OID,那麽當調用Session的Save()
  方法保存該對象時,會立即執行向數據庫插入該實體的insert語句
  二、Session在清理緩存時,會按照什麽順序來執行Sql語句?
  答:
  1、按照應用程序調用Session.Save()方法的先後順序,執行所有對實體進行插入的insert語句。
  2、執行所有對實體進行更新的update語句。
  3、執行所有對集合進行刪除的delete語句。
  4、執行所有對集合元素進行更新、刪除、插入的sql語句。
  5、執行所有對集合進行插入的insert語句。
  6、按照應用程序調用Sesson.delete()方法的先後順序,執行所有對實體進行刪除的delete語句。
  三、Session清理緩存的三種模式
  
  
  
   清理緩存的模式
  
  
   Session查詢方法
  
  
   Session的Commit方法
  
  
   Session的Flush方法
  
  
  
  
   FlushMode.Auto
  
  
   清理
  
  
   清理
  
  
   清理
  
  
  
  
   FlushMode.Commit
  
  
   不清理
  
  
   清理
  
  
   清理
  
  
  
  
   FlushMode.None
  
  
   不清理
  
  
   不清理
  
  
   清理
  
  
  
  四、Session的SaveOrUpdate方法如何工作,如何判斷一個對象是臨時對象還是遊離對象?
  答:如何傳入的參數是臨時對象就調用Save()方法;如果傳入的對象是遊離對象,就調用Update()方法;如果傳入的參數是持久化對象就直接返回。
  Hibernate判斷臨時對象的標准:
  1、 實體對象OID爲null
  2、 實體對象具有version屬性並且取值爲null
  3、 在映射文件中爲<id>元素設置了unsaved-value屬性,並且OID取值與unsaved-value屬性值匹配。
  4、 自定義Hibernate的Interceptor實現類,並且Interceptor的isUnsaved()方法返回Boolean.True。
  五、在進行對象級聯的時候有一個cascade屬性,這個屬性的屬性值代表什麽意義?
  
  
  
   cascade屬性值
  
  
   描述
  
  
  
  
   none
  
  
   在保存、更新或者刪除對象時,忽略其他關聯的對象,它是級聯的默認值
  
  
  
  
   save-update
  
  
   當通過Session的Save()、Update()以及SaveOrUpdate()方法來保存、更新對象時,級聯保存關聯的臨時對象,並更新關聯的遊離對象。
  
  
  
  
   delete
  
  
   當通過Session的Delete()方法刪除當前對象時,同時會刪除關聯的所有對象。
  
  
  
  
   all
  
  
   包含save-update以及delete的行爲,此外對當前對象進行Evict()或者Lock()方法時會對關聯的對象進行同樣的操作。
  
  
  
  
   delete-orphan
  
  
   刪除所有和當前對象解除關聯關系的對象。
  
  
  
  
   all-delete-orphan
  
  
   包含all和delete-orphan的行爲。
  
  
  
  六、Hibernate在與觸發器協同工作的時候如何保持數據的同步?
  答:當Session執行Save()方法、SaveOrUpdate()方法、Update()方法時立即執行Session的Reflush()方法,直接繞過Session緩存從數據庫中加載數據,
  七、如何改變Hibernate操作持久化對象的行爲?
  答:通過對攔截器接口的實現改變Session的操作行爲。
 
一、Session在什麽情況下清理緩存? 答: 1、當應用程序調用Transaction.Commit()方法的時候,先清理緩存,然後再向數據庫提交事務。 2、當應用程序調用Session.Find()或者Iterate()方法時,如果緩存中的持久化對象的屬性發 生了變化,就會先清理緩存,以保證查詢的結果能反映持久化對象的最新狀態。 3、當應用程序顯式調用Session.Flush()方法的時候。 注意:Session進行清理緩存的例外情況是,如果對象使用native生成器來生成OID,那麽當調用Session的Save() 方法保存該對象時,會立即執行向數據庫插入該實體的insert語句 二、Session在清理緩存時,會按照什麽順序來執行Sql語句? 答: 1、按照應用程序調用Session.Save()方法的先後順序,執行所有對實體進行插入的insert語句。 2、執行所有對實體進行更新的update語句。 3、執行所有對集合進行刪除的delete語句。 4、執行所有對集合元素進行更新、刪除、插入的sql語句。 5、執行所有對集合進行插入的insert語句。 6、按照應用程序調用Sesson.delete()方法的先後順序,執行所有對實體進行刪除的delete語句。 三、Session清理緩存的三種模式 清理緩存的模式 Session查詢方法 Session的Commit方法 Session的Flush方法 FlushMode.Auto 清理 清理 清理 FlushMode.Commit 不清理 清理 清理 FlushMode.None 不清理 不清理 清理 四、Session的SaveOrUpdate方法如何工作,如何判斷一個對象是臨時對象還是遊離對象? 答:如何傳入的參數是臨時對象就調用Save()方法;如果傳入的對象是遊離對象,就調用Update()方法;如果傳入的參數是持久化對象就直接返回。 Hibernate判斷臨時對象的標准: 1、 實體對象OID爲null 2、 實體對象具有version屬性並且取值爲null 3、 在映射文件中爲<id>元素設置了unsaved-value屬性,並且OID取值與unsaved-value屬性值匹配。 4、 自定義Hibernate的Interceptor實現類,並且Interceptor的isUnsaved()方法返回Boolean.True。 五、在進行對象級聯的時候有一個cascade屬性,這個屬性的屬性值代表什麽意義? cascade屬性值 描述 none 在保存、更新或者刪除對象時,忽略其他關聯的對象,它是級聯的默認值 save-update 當通過Session的Save()、Update()以及SaveOrUpdate()方法來保存、更新對象時,級聯保存關聯的臨時對象,並更新關聯的遊離對象。 delete 當通過Session的Delete()方法刪除當前對象時,同時會刪除關聯的所有對象。 all 包含save-update以及delete的行爲,此外對當前對象進行Evict()或者Lock()方法時會對關聯的對象進行同樣的操作。 delete-orphan 刪除所有和當前對象解除關聯關系的對象。 all-delete-orphan 包含all和delete-orphan的行爲。 六、Hibernate在與觸發器協同工作的時候如何保持數據的同步? 答:當Session執行Save()方法、SaveOrUpdate()方法、Update()方法時立即執行Session的Reflush()方法,直接繞過Session緩存從數據庫中加載數據, 七、如何改變Hibernate操作持久化對象的行爲? 答:通過對攔截器接口的實現改變Session的操作行爲。
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
  免責聲明:本文僅代表作者個人觀點,與王朝網絡無關。王朝網絡登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
© 2005- 王朝網路 版權所有