Java JPA联合继承查询

Java JPA联合继承查询,java,hibernate,jpa,inheritance,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 en

我不熟悉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实现

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

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

太简单了!但是很难找到JPQL多态查询的示例,因此下面是我的答案:

select a.name,
case type (a)
  when (A1) then a.int1 
  when (A2) then a.int2
end
from A a
获取子实体字段的常用方法是直接查询子字段名称,即:

选择a.int1 从A


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

太简单了!但是很难找到JPQL多态查询的示例,因此下面是我的答案:

select a.name,
case type (a)
  when (A1) then a.int1 
  when (A2) then a.int2
end
from A a
获取子实体字段的常用方法是直接查询子字段名称,即:

选择a.int1 从A


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

对不起,我忘了说我想保留分页,所以在这种情况下联合无效。也许我应该将我的模式从联接表更改为单_表?对不起,我忘了说我想保留分页,所以在这种情况下联合无效。我是否应该将我的模式从联接表更改为单表?