2015-07-28 69 views
2

我試圖理解這些概念之間的關係。 jpa鎖是否是從java中提供/調用數據庫事務隔離級別的方式?或者它是分開的機制,那麼它們有什麼區別(他們的目的)?理解jpa鎖與事務隔離級別

回答

4

Locking表示您阻止實體同時被多個用戶更新。 有兩種不同類型的鎖定機制。在悲觀鎖定情況下,在執行更新之前,表中的行必須由用戶鎖定,並且其他用戶無法執行目標實體的更新。該行更新後,該表必須解鎖,以便其他用戶也可以修改目標記錄。另一種選擇是使用樂觀鎖定。在這樣的實現中,每個實體都有一個版本列(在JPA @Version中可以使用)。如果實體由用戶更新,則其值或時間戳也會更新。如果其他用戶使用具有過期值的實體執行更新,則會拋出OptimisticLockException,並且用戶或應用程序必須獲取新實體併合並更改。 需要此功能來防止實體丟失更新,其中最後一次提交會覆蓋所有其他更改。

Transaction Isolation Levels負責數據庫讀取的一致性。例如,如果使用「READ UNCOMMITTED」,則可以在事務處理完成之前看到數據庫正在更新的更改。這意味着,如果發生錯誤並且事務已回滾,則另一個用戶將獲取從未存儲在數據庫中的更改。 「READ COMMITTED」只會提交已提交的更改。

沒有「完美」的隔離級別。事務隔離級別的「正確」值取決於應用程序中的用例。例如,用於時間跟蹤的JIRA Tempo插件標記未提交紅色的記錄,以顯示數據未決。