JPA加入继承查询

时间:2015-10-29 09:35:24

标签: java hibernate jpa inheritance

我是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

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

我需要保留分页,如果可能的话,我需要订购,我认为从"加入"到"单表",它有意义吗?

事先提前

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

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

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

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

选择a.int1 来自A a

这很容易,但我找不到足够的关于这个主题的文档。