一尘不染

JPA-可选列

hibernate

每个客户在不同的数据库中都有许多客户数据,这些数据应该具有相同的架构/表结构。但是,与其他数据库相比,在某些数据库中有一个表具有额外的列。

例如,对于客户A,有一个表X,其中包含a,b,c,d列。对于客户B,有一个表X,其中包含a,c,d列。我需要捕获b(如果存在),但是可以忽略它。

如果它们不存在,是否有办法告诉JPA忽略这些列?@Basic(optional=true)读取的内容与我想要的完全一样,但是文档表明它是出于其他目的。

目前,正如预期的那样,我在“字段列表”中获得了未知列“ table.field”

PS我不能只是将列添加到不幸的是没有它们的数据库中。


阅读 289

收藏
2020-06-20

共1个答案

一尘不染

@Basic(optional=true) 只是告诉模式生成器(如果有)该字段可以容纳空值,而不是该字段可能存在或可能不存在。

我想到的一个可能的解决方案是使用类层次结构,使用@MappedSuperclass而不是定义一个公共父类,@Entity然后为从该数据库扩展的每个数据库定义每个具体类。

使用@MappedSuperclassJPA实现时,将不会查找与这些字段匹配的表,因此您甚至可能只有一些 空的实体类 (扩展了超类)才可以定义模型。

2020-06-20