JPA - 可选列

Jos*_*osh 8 java hibernate jpa

我们在每个客户的单独数据库中有许多客户数据,这些数据库应具有相同的模式/表结构.但是,有些表在某些数据库中与其他数据库相比具有额外的列.

例如,对于客户A,存在具有列a,b,c,d的表X. 对于客户B,存在具有列a,c,d的表X. 如果它存在,我需要捕获b但如果不存在则可以忽略它.

有没有办法告诉JPA如果它们不存在则忽略这些列?@Basic(optional=true)读取完全符合我的要求,但文档表明它是出于其他目的.

正如预期的那样,我得到'字段列表'中的未知列'table.field'

PS我不能简单地将列添加到没有它们的数据库中.

Alo*_*uez 11

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

我想到的一个可能的问题解决方案是使用类层次结构,定义一个公共父类,@MappedSuperclass而不是@Entity为每个数据库定义每个具体类.

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