原创 4.2.6 將detached對象編程transient狀態

  最後,你可以把一個detached對象編程transient狀態,刪除其在數據庫中對應的狀態。這意味着你不需要重新和session產生關聯去從數據庫中刪除它,你可以直接刪除一個detached實例: 在這個例子中,delete()

原创 4.3.3管理auction categories

  系統管理員可以創建新的categories,重命名categories,移除其子categories。你可以從圖4.3中看到這種結構。 現在,我們來映射這個類和關聯: 正如第三章討論的,這是一個遞歸的、雙向的一對多關聯。one

原创 4.3.4 區分transient和detached實例

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

原创 4.4.3 通過Criteria查詢

  Hibernate QBC(query by criteria)允許你在運行時通過包裝一個標準的對象來構建查詢。這種方式可以允許你動態的指定一些約束,但是同時它也喪失了HQL的一些易用性。從另一方面說,通過Criteria構建的查詢的

原创 4.2.5 將持久化對象編程transient狀態

  最後,你可以把一個detached對象編程transient狀態,刪除其在數據庫中對應的狀態。這意味着你不需要重新和session產生關聯去從數據庫中刪除它,你可以直接刪除一個detached實例: 在這個例子中,delete()

原创 4.3.2 Hibernate的cascading持久化

Hibernate的傳播性持久化模型使用了一些基本的概念來實現持久化的可達性---那就是使用關聯來將判斷傳播的狀態。然而,Hibernate允許你爲每個關聯關係映射指定一種casdcade風格。Hibernate會讀取這種設置,自動對關

原创 4.3 在hibernate中使用傳播性持久化

一般的程序中當然不會只有一個對象。當程序操作一組持久化對象的時候,其中就可能包括persistent,detached和transient的實例。傳播性持久化就是一種強制保存transient和detached對象的技術。 例如,如

原创 4.4.5 取得策略

在傳統的關係數據庫訪問中,你可以通過一條SQL語句,利用內連接和外連接來取得所需要的數據。對於一些原始的ORM實現策略來說,訪問對象圖的持久化對象需要對數據庫進行許多瑣碎的請求才行。這種方式沒有充分的利用關係數據庫連接的能力。實際使用中

原创 4.1.5 對象身份標識範圍之外

如果一個對象引用離開了對象身份的範圍,那麼我們稱這個引用指向了一個detached對象。爲了這個概念如此有用呢? 在web程序中,通常在用戶交互中你不需要維護一個數據庫事務。用戶可能需要花費很長時間去做修改方面的事情,但是由於性能方面

原创 4.1.4 對象身份的範圍

  作爲開發人員,我們使用==來識別一個對象的身份。因此,如果一個對象更改了狀態以後,它的身份是否仍然和原來一樣?在分層的程序當中,可能並不如此簡單。 爲了更深入探討這個問題,需要明白在java對象身份和數據庫標識之間的關係。有些時候,

原创 4.1.6 實現equals()和hashCode()

  在java中,equals()方法通常被應用程序調用或者被集合調用。例如,Set會調用equals()方法來確定元素是否重複。 首先,我們來考慮equals()的默認實現。Hibernate保證在每個Session中,每個表格行有且

原创 4.2 持久化管理器

任何一個透明化的持久化工具都會提供一個持久化管理器的API,它通常能夠給提供如下服務: 1)基本的CRUD操作 2)查詢操作 3)事務控制 4)事務級別緩存的管理 持久化管理器能夠通過幾個不同的接口來暴露給開發者。這些接口的

原创 4.2.1 持久化一個對象

  你想做的第一件事就是用Session把一個Transient對象持久化。爲了做到這些,你需要使用save()方法: 首先,我們初始化一個user對象。當然,我們也可以在建立Session實例之後再初始化它,它們之間的順序沒有什麼

原创 4.2.2 更新detached對象的持久化狀態

  在session關閉之後再去修改user不會對數據庫中的數據造成任何影響。當session被關閉之後,user變成了一個detached對象。需要通過update()或者lock()方法來重新和一個新的session關聯。 Upda

原创 4.2.4 更新持久化對象

  通過get()方法或者其他查詢來獲取的持久化對象都和當前的Session和事務相關聯。這個對象可以被修改並且會被同步到數據庫。這種機制被稱爲自動髒數據檢測,也就是說Hibernate會自動跟蹤和保存session中的對象: 首先,