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