領域驅動設計與關聯式資料庫

所有 Spring Data 模組的靈感都來自於領域驅動設計中的「repository」(儲存庫)、「aggregate」(聚合),以及「aggregate root」(聚合根)等概念。這些概念對於 Spring Data JDBC 來說可能更加重要,因為它們在某種程度上與使用關聯式資料庫時的常規實務相反。

聚合是一組實體,保證在對其進行原子變更之間保持一致性。一個經典範例是具有 OrderItemsOrderOrder 上的屬性(例如,numberOfItemsOrderItems 的實際數量一致)在進行變更時保持一致。

跨聚合的參考不保證在任何時候都保持一致。它們保證最終會變得一致。

每個聚合都恰好有一個聚合根,它是聚合的實體之一。聚合僅透過該聚合根上的方法進行操作。這些是前面提到的原子變更。

儲存庫是對持久儲存的抽象,看起來像是某種類型的所有聚合的集合。對於一般的 Spring Data 來說,這表示您希望每個聚合根都有一個 Repository。此外,對於 Spring Data JDBC 來說,這表示從聚合根可存取的所有實體都被視為該聚合根的一部分。Spring Data JDBC 假設只有聚合具有指向儲存聚合非根實體的資料表的外部索引鍵,並且沒有其他實體指向非根實體。

在目前的實作中,從聚合根參考的實體會由 Spring Data JDBC 刪除並重新建立。

您可以使用符合您的工作風格和資料庫設計風格的實作來覆寫儲存庫方法。