Я пытаюсь написать запрос HQL для выбора объектов, содержащих объект в дочерней коллекции.
Пример:
Объект конкурса
ContestID
ContestName
RequiredCountries -> one to many collection of Country objects
Объект страны
CountryCode
CountryName
Эквивалент sql, который я хочу:
SELECT * FROM CONTEST C
WHERE C.CONTESTID IN(SELECT CONTESTID FROM CONTEST_COUNTRY CC INNER JOIN COUNTRY CTRY ON
CC.COUNTRYCODE = CTRY.COUNTRYCODE WHERE COUNTRYCODE='USA')
ИЛИ
SELECT * FROM CONTEST C
WHERE EXISTS(SELECT CONTESTID FROM CONTEST_COUNTRY CC INNER JOIN COUNTRY CTRY ON
CC.COUNTRYCODE = CTRY.COUNTRYCODE WHERE COUNTRYCODE='USA' AND CC.CONTESTID=C.CONTESTID)
У меня есть этот hql, который работает, но кажется не хорошим решением -
from Contest C
where (from Country where CountryCode = :CountryCode) = some elements(C.RequiredCountries)
Я также рассматриваю присоединение к стране, но поскольку у меня нет объектного класса для представления отношения, я не был уверен, как присоединиться к HQL.
У кого-нибудь есть идеи или предложения? Это должно быть легко.