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

Spring data JPA with Hibernate 支持注解javax.persistence.Inheritancejavax.persistence.InheritanceType 中的常量。基于这些,实体类之间的继承映射到DB(单表/联表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。

【问题讨论】:

    标签: java spring spring-boot spring-webflux spring-data-r2dbc


    【解决方案1】:

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

    经典方法:表映射策略

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

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

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

    替代方案:无架构

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-29
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2015-02-17
      • 2020-11-29
      相关资源
      最近更新 更多