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

所有 Spring Data 模块都受到领域驱动设计中“仓库”、“聚合”和“聚合根”概念的启发。这些概念对于 Spring Data JDBC 来说可能更加重要,因为在某种程度上,它们与使用关系型数据库时的正常做法相悖。

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

聚合之间的引用并不保证始终保持一致。它们最终会保证一致。

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

仓库是对持久化存储的抽象,它看起来像一个包含特定类型所有聚合的集合。对于 Spring Data 来说,这意味着你应该为每个聚合根创建一个 Repository。此外,对于 Spring Data JDBC 来说,这意味着从聚合根可达的所有实体都被视为该聚合根的一部分。Spring Data JDBC 假设只有聚合拥有指向存储非根实体的表的外部键,并且没有其他实体指向非根实体。

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

你可以用与你的工作风格和数据库设计相匹配的实现来覆盖仓库方法。