Hibernate JPQL:从超类联接确定子类类型?

Hibernate JPQL:从超类联接确定子类类型?,hibernate,inheritance,jpa,jpql,ejbql,Hibernate,Inheritance,Jpa,Jpql,Ejbql,我的问题与此非常相似: …,除了一件事: 我使用的是JPQL查询,而不是Hibernate Criteria API(不过仍然是Hibernate作为JPA提供者) 我引用了一个超级表/实体类(Round),它有两个子表/实体类(RankingRound和EliminationRound)。然后创建一个联接: SELECT ... ??? AS is_ranking_round ... FROM Group gr JOIN gr.round rd ... WHERE

我的问题与此非常相似:

…,除了一件事:

  • 我使用的是JPQL查询,而不是Hibernate Criteria API(不过仍然是Hibernate作为JPA提供者)
我引用了一个超级表/实体类(Round),它有两个子表/实体类(RankingRound和EliminationRound)。然后创建一个联接:

SELECT
  ...
  ??? AS is_ranking_round
  ...
FROM Group gr
  JOIN gr.round rd
  ...
WHERE

有没有一种方法可以像上面在JPQL中一样找到rd实例的round类型?(我似乎无法将标准转换为在JPQL中工作的任何内容。)

这只适用于JPA2.0版本。JPA 1没有类型

要将类型获取为java.lang.Class,请执行以下操作:

Select TYPE(rd)  FROM Group gr JOIN gr.round rd 
将类的类型映射到字符串:

SELECT
    CASE TYPE(rd)
        WHEN RankingRound THEN 'RankingRound'
        WHEN EliminationRound THEN 'EliminationRound'
       ELSE 'Not mapped'
    END
FROM Group gr JOIN gr.round rd