JPA - 可选列

时间:2013-09-30 15:52:53

标签: java hibernate jpa

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

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

有没有办法让JPA忽略这些列,如果它们不存在? @Basic(optional=true)读取的内容与我想要的完全相同,但文档表明它仅用于其他目的。

目前我按照预期得到了'字段列表'

中的未知列'table.field'

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

1 个答案:

答案 0 :(得分:9)

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

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

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