如果事先只知道表模式的一部分,如何从关系数据库加载实体?

问题描述 投票:0回答:0

我有一个映射到表的实体。该表通常在映射属性之上有一些列。例如,如果实体定义为:

@Entity
class MyEntity {
  private String a;
}

然后表格有

a
列。在一个模式中,它也可能有列
b
c
,在另一个
d
e
f
中。我认为重写
EntityManager
load
方法来加载
MyEntity
中定义的所有属性并随后将所有其他属性加载到
Map<String, Object>
中会很简单,但我找不到方法来做到这一点. 到目前为止,这是我的考虑:

  1. 我发现 this SO question,这导致了 this post 这可能解决了问题,但需要在启动时加载映射,这并不能解决我的问题,因为我不断在模式之间切换,因此必须重新加载映射一遍又一遍。
  2. Overriding RelationalMappingContext 还假定一个常量模式。
  3. 应该有一种方法可以将
    EntityManager
    作为一个 bean 来提供,但我不知道怎么做,我不确定这是否会遇到与 1 和 2 相同的问题。
  4. 我可以通过字节码操作做一些复杂的事情,但这需要每个模式都有一个实体,这太复杂了。
  5. 所以我不得不考虑覆盖
    CrudRepository
    中的所有方法并提供我自己的实现。那将是非常笨拙和笨拙的。

还有其他想法吗?

java mysql spring hibernate spring-data-jpa
© www.soinside.com 2019 - 2024. All rights reserved.