领域驱动设计与关系型数据库
所有 Spring Data 模块都受到领域驱动设计中“存储库”、“聚合”和“聚合根”概念的启发。这些概念对于 Spring Data JDBC 来说可能更加重要,因为在某种程度上,它们与使用关系型数据库时的常规做法相悖。
聚合是一组实体,保证在其原子更改之间保持一致性。一个经典的例子是包含 `OrderItems` 的 `Order`。`Order` 上的一个属性(例如,`numberOfItems` 与 `OrderItems` 的实际数量一致)在进行更改时保持一致。
跨聚合的引用并非始终保证一致性。它们最终将保证一致。
每个聚合都只有一个聚合根,它是聚合中的一个实体。聚合只能通过该聚合根上的方法进行操作。这些是前面提到的原子更改。
存储库是对持久化存储的抽象,看起来像是特定类型的所有聚合的集合。对于 Spring Data 来说,这意味着您希望为每个聚合根创建一个 `Repository`。此外,对于 Spring Data JDBC 来说,这意味着从聚合根可访问的所有实体都被视为该聚合根的一部分。Spring Data JDBC 假设只有聚合对存储聚合非根实体的表具有外键,并且没有其他实体指向非根实体。
在当前实现中,Spring Data JDBC 会删除并重新创建从聚合根引用的实体。 |
您可以使用与您的工作风格和数据库设计相匹配的实现覆盖存储库方法。