JPQL: определить тип подкласса из соединения суперкласса?

Мой вопрос очень похож на этот:

Как я могу написать запрос Hibernate Criteria для суперкласса и проверить наличие определенного подкласса?

... кроме одного:

  • Я использую 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
Другие вопросы по тегам