JPQL:从超类连接中确定子类类型?

时间:2011-07-04 22:34:28

标签: hibernate inheritance jpa jpql ejbql

我的问题与此非常相似:

How can I write a Hibernate Criteria query, for a super-class, and check for a certain sub-class?

...,除了一件事:

  • 我正在使用JPQL查询而不是Hibernate Criteria API(尽管仍然是Hibernate作为JPA提供程序)

我正在引用一个超级表/实体类(Round),它有两个子表/实体类(RankingRound和EliminationRound)。然后我创建了一个JOIN:

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

有没有办法在JPQL中找到如上所述的rd实例的圆形类型? (我似乎无法将标准转换为适用于JPQL的任何内容。)

1 个答案:

答案 0 :(得分:2)

这仅适用于JPA 2.0。 JPA 1没有TYPE。

获取类型为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