我有 2 個彼此相關的問題
Q1 hibernate/Spring Data JPA 中的事務邊界到底是什么。我是 JPA 新手,所以請舉一個非常基本的例子,以便我可以理解,因為我試圖閱讀多個博客但仍然不是很清楚。
Q2 最重要的是,這是什么意思——
在 hibernate 中,persist() 方法保證如果在事務邊界之外呼叫它不會執行 INSERT 陳述句,save() 方法不保證相同。
事務邊界的外部和內部是什么以及如何在邊界之外執行執行?
uj5u.com熱心網友回復:
事務邊界是事務開始或提交/回滾的地方。
uj5u.com熱心網友回復:
當一個事務啟動時,事務背景關系被系結到當前執行緒。因此,無論您的訊息流中有多少端點和通道,只要您確保流在同一執行緒上繼續,您的事務背景關系都將被保留。一旦您通過引入 Pollable Channel 或 Executor Channel 或在某些服務中手動啟動新執行緒來打破它,Transactional 邊界也將被打破。
- 其他一些人問這個問題 - 查一下。
如果您不明白某些內容,請再次更準確地給我寫信,我會解釋。我真的希望我能幫上忙!
uj5u.com熱心網友回復:
事務是完全執行或根本不執行的作業單元。
事務在典型的關系資料庫中使用起來相當簡單。您通過修改一些資料來啟動事務。每次修改都會啟動一個事務,您通常無法避免它。您通過執行commitor來結束事務rollback。
在您的交易完成之前,您的更改無法在其他交易中看到(有例外、變化和詳細資訊)。如果rollback您進行事務處理,則資料庫中的所有更改都將撤消。如果您commit的更改對其他事務可見,即對于連接到同一資料庫的其他用戶,您的更改將變得可見。如果更改僅對新事務或已經運行的事務可見,則實作在許多其他方面會有所不同。
JPA 中的事務是資料庫事務加上其他內容。Transaction您可以通過獲取一個物件并在其上呼叫方法來開始和結束事務。但是沒有人再這樣做了,因為它容易出錯。相反,您使用注釋方法@Transaction并輸入該方法將啟動事務,退出該方法將結束事務。細節由 Spring 處理。
JPA 事務的棘手部分在于,在 JPA 事務中,JPA 可能(并且將)選擇盡可能地延遲甚至避免讀取和寫入操作。例如,當您加載一個物體,并在同一個 JPA 事務中再次加載它時,JPA 不會從資料庫加載它,而是回傳它在第一次加載操作期間回傳的相同實體。如果您想了解有關此的更多資訊,我建議您查看 JPA 一級快取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/454321.html
