Я думаю, что проблема, которая у меня есть, - это ошибка в Hibernate (уже отслежена - https://hibernate.onjira.com/browse/HHH-879).
У меня вопрос: есть ли обходной путь для многократного объединения таблицы с запросом критерия Grails?
SQL будет прямым:
SELECT s FROM Store AS s
INNER JOIN s.Products AS prod1
INNER JOIN s.Products AS prod2
WHERE
prod1.Type = 'Shoes'
AND
prod2.Type = 'Shirts'
Когда я использую «createAlias» в запросе критериев Grails (один для prod1 и один для prod2), я получаю следующую ошибку:
org.hibernate.QueryException: повторяющийся путь ассоциации: studyTags
...
Одной из возможностей может быть выполнение запроса с помощью ИЛИ (один-единственный JOIN и WHERE prod.Type = 'Shoes' ИЛИ 'Shirts'), а затем фильтрация набора результатов. Проблема с этим решением состоит в том, что если я укажу ограничение для запроса критериев (максимум результатов), реальный результат (после фильтрации) может иметь меньше записей, чем указано.
Любая помощь будет оценена.
Спасибо.
PS: Мой настоящий код, где я столкнулся с этой проблемой, довольно сложный. Чтобы устранить проблему, я использовал этот пример с Store и Product ... Я думаю, что запрос будет выглядеть как
Store.withCriteria{
createAlias('products', 'prod1')
createAlias('products', 'prod2')
and{
eq('prod1.Type', 'Shoes')
eq('prod2.Type', 'Shirts')
}
}