JPA / Hibernate实体状态转换的初学者指南
生活随笔
收集整理的這篇文章主要介紹了
JPA / Hibernate实体状态转换的初学者指南
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹
Hibernate將開發人員的思維方式從SQL語句轉移到實體狀態轉換。 一旦實體由Hibernate主動管理,所有更改將自動傳播到數據庫。
操作域模型實體(及其關聯)比編寫和維護SQL語句容易得多。 如果沒有ORM工具,則添加新列需要修改所有關聯的INSERT / UPDATE語句。
但是,Hibernate也不是靈丹妙藥。 Hibernate并沒有使我們擺脫擔心實際執行的SQL語句的麻煩。 控制Hibernate并不像人們想象的那么簡單,并且必須檢查 Hibernate代表我們執行的所有SQL語句 。
實體陳述
如前所述,Hibernate監視當前連接的實體。 但是,要使實體成為受管理實體,它必須處于正確的實體狀態。
首先,我們必須定義所有實體狀態:
- 新建(臨時):從未與Hibernate會話(也稱為持久性上下文)相關聯且未映射到任何數據庫表行的新創建的對象被視為處于“ 新建(臨時)”狀態。需要顯式調用EntityManager#persist方法或使用可傳遞持久性機制。
- 持久性(托管): 持久性實體已與數據庫表行關聯,并由當前運行的持久性上下文進行管理。 對此類實體所做的任何更改都將被檢測到,并傳播到數據庫(在會話刷新期間)。 使用Hibernate,我們不再需要執行INSERT / UPDATE / DELETE語句。 Hibernate采用“事務后寫”工作方式,并且在當前Session刷新時間的最后一個負責時刻同步更改。
- 分離:關閉當前正在運行的持久性上下文后,所有先前管理的實體都將分離 。 不再跟蹤連續的更改,也不會自動進行數據庫同步。要將分離的實體與活動的Hibernate會話相關聯,可以選擇以下選項之一:
- 重新連接
- 刪除:盡管JPA要求只允許刪除管理實體 ,但是Hibernate也可以刪除分離的實體 (但只能通過Session#delete方法調用)。刪除的實體僅計劃刪除,并且將執行實際的數據庫DELETE語句在會話刷新期間。
實體狀態轉換
要更改一個實體狀態,我們需要使用以下實體管理接口之一:
- 實體管理器
- 屆會
這些接口定義了實體狀態轉換操作,我們必須顯式調用以將實體狀態更改通知給Hibernate。 在刷新時,實體狀態轉換會具體化為數據庫SQL語句(INSERT / UPDATE / DELETE)。
翻譯自: https://www.javacodegeeks.com/2014/07/a-beginners-guide-to-jpahibernate-entity-state-transitions.html
總結
以上是生活随笔為你收集整理的JPA / Hibernate实体状态转换的初学者指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用示例从Java中的类路径加载资源
- 下一篇: Android 14稳定版首批更新机型曝