Spring Data r2dbc - 实体继承

Posted

技术标签:

【中文标题】Spring Data r2dbc - 实体继承【英文标题】:Spring Data r2dbc - Entity inheritance 【发布时间】:2020-09-22 21:18:45 【问题描述】:

Spring data JPA with Hibernate 支持注解javax.persistence.Inheritancejavax.persistence.InheritanceType 中的常量。基于这些,实体类之间的继承映射到DB(单表/联表https://***.com/a/3579462/12053054)。

我找不到任何类似的机制来支持使用 spring data r2dbc 进行实体继承。我知道 JPA 和 Hibernate 的东西与 r2dbc 无关,但我认为在 spring 数据 r2dbc 存储库中支持继承没有任何问题,也没有任何针对函数式编程的“反模式”。

是否有任何解决方法或任何机制可以让我在 spring data r2dbc 存储库中使用继承? (不仅继承字段,而且在调用 Spring Data JPA 存储库方法时将继承转换为与 JPA/Hibernate 相同的 DB)。我唯一的临时解决方法是手动执行查询并自行实现 spring data r2dbc 存储库方法,这样我也可以将继承转换为 DB。

【问题讨论】:

【参考方案1】:

r2dbc 不是 ORM(即没有 OBJECT 关系映射器),因此不支持面向对象的空洞主题。在纯 SQL 的基础上,没有开箱即用的继承,但您需要自己构建表以表示继承(但从技术上讲,它们只是表)。

经典方法:表映射策略

在 r2dbc 和 spring 反应堆栈有任何 ORM 之前,您需要自己实现到表的继承映射以及根据映射策略连接表的存储库。最常见的策略(各有利弊)是:

单表(将所有列合并到一个表中) 混凝土表(重复每个混凝土表的所有公共列) 每种类型的表(有一个包含公共列的表,然后每个具体类都有一个表及其添加的列)

在 google 上或例如在this answer 中查找更多详细信息。

替代方案:无架构

另一种方法可能是对公共属性使用普通列,对子类的数据使用 schema-less 列。 例如,在使用 postgres 时,它对 JSONB 类型有很好的支持,您可以使用它来轻松实现存储库,而无需大量连接等。

【讨论】:

以上是关于Spring Data r2dbc - 实体继承的主要内容,如果未能解决你的问题,请参考以下文章

Spring认证中国教育管理中心-Spring Data R2DBC框架教程一

Spring Data(数据)R2DBC

Spring Data R2DBC响应式操作MySQL

MYSQL R2DBC 的 Spring Data 多主机设置

Spring Data R2DBC 响应式数据库操作使用

如何在 R2DBC 和 Spring WebFlux 中加入多个表?