领域驱动设计和关系数据库

所有 Spring Data 模块都受到领域驱动设计的“存储库”、“聚合”和“聚合根”概念的启发。 这些概念对于 Spring Data JDBC 可能更为重要,因为它们在某种程度上与使用关系数据库时的常规实践相反。

聚合是一组实体,保证在对其进行原子更改之间保持一致。 一个经典的例子是带有 OrderItemsOrderOrder 上的属性(例如,numberOfItemsOrderItems 的实际数量一致)在进行更改时保持一致。

跨聚合的引用不能保证始终一致。 它们保证最终会变得一致。

每个聚合都只有一个聚合根,它是聚合的实体之一。 聚合只能通过该聚合根上的方法进行操作。 这些是前面提到的原子更改。

存储库是对持久存储的抽象,看起来像某种类型的所有聚合的集合。 对于一般的 Spring Data 而言,这意味着您希望每个聚合根都有一个 Repository。 此外,对于 Spring Data JDBC,这意味着从聚合根可访问的所有实体都被认为是该聚合根的一部分。 Spring Data JDBC 假定只有聚合具有指向存储聚合的非根实体的表的外键,而没有其他实体指向非根实体。

在当前实现中,从聚合根引用的实体由 Spring Data JDBC 删除并重新创建。

您可以重写存储库方法,使其实现与您的工作方式和设计数据库的风格相匹配。