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