0

Spring data JPA with Hibernate 支持javax.persistence.Inheritance 内部的注解和常量javax.persistence.InheritanceType。基于这些,实体类之间的继承被映射到数据库中(单表/联表https://stackoverflow.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。

4

1 回答 1

0

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

经典方法:表映射策略

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

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

在 google 上或例如在此答案中查找更多详细信息。

替代方案:无模式

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

于 2021-05-02T21:21:38.140 回答