2

我的问题与这个问题非常相似:

如何为超类编写 Hibernate Criteria 查询并检查某个子类?

..., 除了一件事:

  • 我使用的是 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 中有效的任何内容。)

4

1 回答 1

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
于 2011-09-24T13:50:26.970 回答