JPQL: определить тип подкласса из соединения суперкласса? - PullRequest
2 голосов
/ 05 июля 2011

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

Как написать запрос 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 Ответ

2 голосов
/ 24 сентября 2011

Работает только с 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
...