当前位置: 首页 > 面试题库 >

JPA-可选列

栾峰
2023-03-14
问题内容

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

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

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

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

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


问题答案:

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

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

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



 类似资料:
  • 是否有一种方法可以使用来完成这一任务,而不需要为每个Patamenter组合创建大量/语句?

  • 我想用spring Boot1.5执行过滤器列表的查询,我有必需的参数(用户名)和可选的参数(电子邮件),我如何在查询中分配可选的参数?@Query(“从User u中选择u.username LIKE:username和u.email=:email”)公共页面getUsers(@param(“username”)字符串username,@param(“email”)字符串email);http:

  • 我有一个控制器尝试用可选字段搜索。JPA实体类定义为:

  • 问题内容: 在浏览java.util软件包的文档时,我很惊讶地发现了这一点,并且彼此之间没有任何关系。这似乎很难相信,因为它表明它们是无关的类。 他们为什么没有一个通用的接口,类,子类型或 某些东西 来揭示它们之间的关系?(当您查看它们的用途时,它们是 非常 相似的类。) 另外,为什么需要额外的课程呢?你为什么不能只用呢?我以为是因为它是原始的,但事实并非如此,这将是一个不一致的设计选择。 问题答

  • 我一直在使用Java 8中的新的可选类型,我遇到了一个似乎不受功能支持的常见操作:“orelseoptional” 请考虑以下模式: 这种模式有很多种形式,但归结起来就是在一个可选项上需要一个“orelse”,该“orelse”接受一个函数,生成一个新的可选项,只有当当前的可选项不存在时才调用。 它的实现如下所示: 我很好奇这样一种方法不存在的原因,如果我只是在一种无意的方式下使用Optional

  • 我必须用一个特定的名称(我使用spring和Jpa)来命名扩展CrudRepository的接口,即。 所以在本例中,我有一个名为UserRepository的实体 我尝试了注释 但这行不通...