此版本仍在开发中,尚未被视为稳定版本。如需使用最新的稳定版本,请使用 Spring Data Relational 4.0.4spring-doc.cadn.net.cn

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

所有 Spring Data 模块都受到领域驱动设计(Domain Driven Design)中“仓库”(repository)、“聚合”(aggregate)和“聚合根”(aggregate root)等概念的启发。 对于 Spring Data JDBC 而言,这些概念可能更为重要,因为它们在某种程度上与使用关系型数据库时的常规做法相悖。spring-doc.cadn.net.cn

聚合(Aggregate)是一组实体,其内部在发生原子性变更时始终保持一致性。 一个经典示例是包含 OrderOrderItems。 当对订单进行修改时,Order 上的某个属性(例如 numberOfItems)会始终与实际的 OrderItems 数量保持一致。spring-doc.cadn.net.cn

跨聚合的引用并不保证始终一致。 它们最终会达到一致状态。spring-doc.cadn.net.cn

每个聚合恰好有一个聚合根,该聚合根是聚合中的一个实体。 聚合只能通过该聚合根上的方法进行操作。 这些就是前面提到的原子性变更。spring-doc.cadn.net.cn

仓库(Repository)是对持久化存储的一种抽象,其表现形式类似于某一特定类型聚合的集合。 对于 Spring Data 而言,通常意味着每个聚合根应对应一个 Repository。 此外,对于 Spring Data JDBC 来说,这意味着从某个聚合根可到达的所有实体都被视为该聚合根的一部分。 Spring Data JDBC 假设只有该聚合拥有指向存储聚合中非根实体的表的外键,且没有其他实体指向这些非根实体。spring-doc.cadn.net.cn

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

你可以使用符合你自己工作方式和数据库设计风格的实现来覆盖仓库方法。spring-doc.cadn.net.cn