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

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的操作行爲。
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有