Spring Data r2dbC语言 实体继承



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

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

是否有任何解决方法或任何机制可以让我在 spring 数据 r2dbc 存储库中使用继承?(不仅继承字段,而且还将继承转换为数据库,就像 JPA/Hibernate 在调用 springdata JPA 存储库方法时所做的那样(。我唯一的临时解决方法是手动执行查询并自行实现 spring data r2dbc 存储库方法,以便我也可以将继承转换为数据库。

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

经典方法:表映射策略

在 r2dbc 和 spring 反应式堆栈有任何 ORM 之前,您需要自己实现对表的继承映射,以及根据您的映射策略连接表的存储库。最常见的策略(每种策略都有优点和缺点(是:

  • 单个表(将所有列合并为一个表(
  • 具体表
  • (重复每个具体表的所有常见列(
  • 每个
  • 类型的表(有一个包含公共列的表,然后每个具体类都有一个表,其中仅包含其添加的列(

在谷歌上查找更多详细信息,例如在此答案中。

替代方法:无架构

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

最新更新