Запрос HQL для нескольких типов/классов

У меня сложная иерархия классов с несколькими уровнями наследования, и мне нужно запросить определенные типы в этой иерархии, используя HQL.

Скажем, у меня есть классы Cat, Dog и Monkey, с общим Animal основного класса.

Как написать запрос, который выбирает только некоторые из них, допустим, Cat и Dog?

Мне также нужно сортировать или фильтровать определенные свойства животных - так скажем, животные с Sex = "Мужчина" и порядок по имени.

Возможно ли это?

Ответ 1

Стандартная функция JPQL TYPE(), которая также поддерживается в Hibernate, как указано в документации.

Пожалуйста, следуйте примеру:

select a from Animal a
where type(a) in ('Cat', 'Dog')
    and a.sex = 'Male'
order by a.name

Hibernate также использует неявное свойство .class:

select a from Animal a
where a.class in ('Cat', 'Dog')
    and a.sex = 'Male'
order by a.name