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