4.3.4 區分transient和detached實例

因爲Hibernate並不會保存指向detached實例的引用,你應該讓Hibernate知道如何區分detached實例(laptops)和transient實例(laptopBags)。

如果Hibernate認爲實例是一個未保存的transient的實例的話,那麼:

1)標識符爲null(如果存在的話)

2)version屬性爲null(如果存在的話)

3)在映射文檔中設置了unsaved-value,並且其值和identifier屬性匹配

4)在映射文檔中爲version屬性設置了unsaved-value,其值和version屬性相匹配。

5)支持Hibernate的Interceptor,通過Interceptor的isUnsaved方法返回TURE或者FALSE。

Unsaved-value屬性告訴Hibernate當標識符的值爲0的時候,認爲Category的實例是transient狀態。默認值是null,因此我們選擇了Long作爲標識符的屬性類型,因此我們可以在拍賣程序中忽略unsaved-value屬性。

你現在應該已經知道了如何優化你的Hibernate程序,減少調用Session的次數。

現在我們需要轉向另外一個重要的概念:如果從數據庫中取得一個持久化對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章