【问题标题】:JPA Joined inheritance queryJPA 加入继承查询
【发布时间】:2016-01-29 08:59:23
【问题描述】:

我是 JPA 中的继承新手。我不知道如何查询这样的内容:

让我们假设一个联合继承映射,其中 A 是一个具有“id”和“name”的实体。并且有从 A 继承的实体 A1 和 A2。 A1 提供字段'int1',A2 提供字段'int2'

我想使用 JPQL 获取两列:'name'、'int'(这可能是 'int1' 或 'int2')

我想做这样的事情:

select a.name,
  case type(a)
    when A1 a1 then a1.int1
    when A2 a2 then a2.int2
  end as int 
from A a

但显然它不起作用,我该如何进行此查询?我正在使用休眠实现。

我需要保留分页和排序,如果可能的话,我认为从“连接”更改为“单表”可能会更好,这有什么意义吗?

提前致谢

【问题讨论】:

    标签: java hibernate jpa inheritance


    【解决方案1】:

    原来如此简单!但是很难找到 JPQL 多态查询的例子,所以这是我的答案:

    select a.name,
    case type (a)
      when (A1) then a.int1 
      when (A2) then a.int2
    end
    from A a
    

    获取子实体字段的常用方法是直接查询子字段名,即:

    选择一个.int1 来自Aa

    这很简单,但我找不到足够多的关于该主题的文档。

    【讨论】:

      【解决方案2】:

      您可以使用 UNION。

      select a1.name as name, a1.int1 as id
      from A1 a1
      UNION
      select a2.name as name, a2.int2 as id
      from A2 a2
      

      【讨论】:

      • 对不起,我忘了说我想保留分页,所以在这种情况下联合是无效的。也许我应该将我的架构从 JOINED 更改为 SINGLE_TABLE?
      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2011-08-20
      • 2011-01-09
      相关资源
      最近更新 更多