Spring Data JPA 是基于 JPA 標準的一種簡化數(shù)據(jù)訪問層的框架,它提供了許多便捷的方法和工具來操作數(shù)據(jù)庫。
在理解 Spring Data JPA 的 Persistence Context 之前,我們先來了解一下 JPA 的 Persistence Context。
Persistence Context 是 JPA 中的一個重要概念,它是一個托管實體對象的容器,用于跟蹤實體對象的狀態(tài)以及對數(shù)據(jù)庫的操作。在一個 Persistence Context 中,每個實體對象都有一個唯一的標識,通過這個標識可以在 Persistence Context 中找到對應的實體對象。
Persistence Context 的核心概念有以下幾點:
實體管理器(EntityManager):實體管理器是 Persistence Context 的入口,它負責管理持久化實體對象的聲明周期,以及對數(shù)據(jù)庫的增刪改查操作。
實體對象的狀態(tài):實體對象在 Persistence Context 中有三種狀態(tài):瞬時態(tài)、托管態(tài)和游離態(tài)。
瞬時態(tài)(Transient):表示實體對象尚未與 Persistence Context 關聯(lián),沒有與數(shù)據(jù)庫交互的能力。
托管態(tài)(Managed):表示實體對象已經(jīng)與 Persistence Context 關聯(lián),可以進行增刪改查的操作。
游離態(tài)(Detached):表示實體對象已經(jīng)與 Persistence Context 斷開關聯(lián),但仍然存在于數(shù)據(jù)庫中。
一級緩存:Persistence Context 中維護了一個一級緩存,用于存儲托管狀態(tài)的實體對象。當查詢實體對象時,首先會從一級緩存中查找,如果找到則直接返回,否則才會去數(shù)據(jù)庫查詢。
臟檢查:當實體對象的屬性發(fā)生變化時,Persistence Context 會自動將變化的屬性同步到數(shù)據(jù)庫,這個過程稱為臟檢查。
延遲加載:Persistence Context 支持延遲加載,即在訪問實體對象的關聯(lián)對象時才進行數(shù)據(jù)庫查詢,從而減少不必要的數(shù)據(jù)庫訪問。
在 Spring Data JPA 中,它封裝了 JPA 的 Persistence Context,通過注解和方法的方式來簡化對數(shù)據(jù)庫的操作。通過 Spring Data JPA,我們可以更方便地進行數(shù)據(jù)庫訪問,而不需要手動編寫大量的重復代碼。