Я пытаюсь написать 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)
Я также рассматриваю возможность присоединения к Country, но так как у меня нет класса объекта для представления отношений, я не был уверен, как присоединиться к HQL.
У кого-нибудь есть идеи или предложения? Это должно быть легко.