JPQL: определить тип подкласса из соединения суперкласса?
Мой вопрос очень похож на этот:
... кроме одного:
- Я использую JPQL-запрос вместо Hibernate Criteria API (хотя Hibernate по-прежнему является JPA-провайдером)
Я ссылаюсь на супер-таблицу / класс сущностей (Round), который имеет две вложенные таблицы / классы сущностей (RankingRound и ElventionRound). Затем я создаю JOIN:
SELECT
...
??? AS is_ranking_round
...
FROM Group gr
JOIN gr.round rd
...
WHERE
Есть ли способ узнать тип округления экземпляра rd, как указано выше в JPQL? (Кажется, я не могу перевести критерий на все, что работает в JPQL.)
1 ответ
Решение
Это работает только с JPA 2.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