HQL и запросы "один ко многим"

У меня есть объекты домена Hibernate, которые выглядят следующим образом:

   class Player {
      List<Item> inventory;
   }

   class Item {
      List<Enchantment> enchantments;
   }

   class Enchantment {
      boolean isSuperiorEnchantment;
   }

Мне нужно построить запрос HQL, который возвращает мне список всех игроков, у которых есть хотя бы один элемент с заклинанием на нем с установленным флагом isSuperiorEnchantment. Я не могу, чтобы жизнь меня определяла способ выразить это в HQL.

Любые идеи?

Ответ 1

Предполагая соответствующие сопоставления по всем вышеперечисленным, запрос, который вы ищете, это:

select p
from Player as p
  left join p.inventory as i
  left join i.enchantments as e
where e.isSuperiorEnchantment = 1