因爲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的次數。
現在我們需要轉向另外一個重要的概念:如果從數據庫中取得一個持久化對象。