領域驅動設計和關係資料庫

所有 Spring Data 模組都受到領域驅動設計的“儲存庫”、“聚合”和“聚合根”概念的啟發。 這些概念對於 Spring Data JDBC 可能更為重要,因為它們在某種程度上與使用關係資料庫時的常規實踐相反。

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

跨聚合的引用不能保證始終一致。 它們保證最終會變得一致。

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

儲存庫是對持久儲存的抽象,看起來像某種型別的所有聚合的集合。 對於一般的 Spring Data 而言,這意味著您希望每個聚合根都有一個 Repository。 此外,對於 Spring Data JDBC,這意味著從聚合根可訪問的所有實體都被認為是該聚合根的一部分。 Spring Data JDBC 假定只有聚合具有指向儲存聚合的非根實體的表的外部索引鍵,而沒有其他實體指向非根實體。

在當前實現中,從聚合根引用的實體由 Spring Data JDBC 刪除並重新建立。

您可以重寫儲存庫方法,使其實現與您的工作方式和設計資料庫的風格相匹配。