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

一、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的操作行爲。

 
C++學習:在C++中創建持久對象
持久對象(persistent objects)廣泛應用于遊戲、分布式數據庫系統、多媒體以及圖形應用程序中。目前C++並不直接支持持久性(persistence)(但有一些在C++未來版本中添加持久性和反射(reflection)的建議)。 ...查看完整版>>C++學習:在C++中創建持久對象
 
Java的“對象思想”學習筆記[二]
在這篇文章裏我將介紹一些Java對于對象的基本處理模式的問題。 首先看一個有關對象相等性(Object equivalence)的例子: 先看下面的代碼: public class EqualTest1{ public static void main(String[] args){ Integer...查看完整版>>Java的“對象思想”學習筆記[二]
 
PHP5學習筆記第二節PHP5的對象模型
  *  +――+  | = 本文爲Haohappy讀  | = 中Classes and Objects一章的筆記  | = 翻譯爲主+個人心得  | = 爲避免可能發生的不必要的麻煩請勿轉載,謝謝  | = 歡迎批評指正,希望和所有PHP愛好者共同進...查看完整版>>PHP5學習筆記第二節PHP5的對象模型
 
學習筆記之 equals() vs. == 和String對象的2種創建過程
先看下面代碼:class Test1{public static void main(String args[]) { int a = 10; int b = 10; System.out.println("a is " + a); System.out.println("b is " + b); System....查看完整版>>學習筆記之 equals() vs. == 和String對象的2種創建過程
 
Java的“對象思想”學習筆記[二]
在這篇文章裏我將介紹一些Java對于對象的基本處理模式的問題。 首先看一個有關對象相等性(Object equivalence)的例子: 先看下面的代碼: public class EqualTest1{ public static void main(String[] args){ Integer...查看完整版>>Java的“對象思想”學習筆記[二]