Я нашел похожие вопросы, но ответов нет.Grails 2.5.1 (hibernate 3) критерии множественных объединений в один стол
class SomeDomain {
static hasMany= [productData:ProductData]
}
ИзделиеТехнический просто тип/значение пары
Я пытаюсь найти все SomeDomains, которые имеют несколько продуктов определенного типа (в цикле). В настоящее время соответствующая часть критериев выглядит следующим образом:
SomeDomain.createCriteria.list {
somedata.each { type, value ->
productData {
eq("type", type)
eq("value", value)
}
}
}
Однако, это создает только один присоединиться к SQL:
from some_domain this_ inner join product_data productdata_a1_ on this_.id=productdata_a1_.some_domain_id
where (productdata_a1_.type_id=4 and productdata_a1_.value='GC')
and (productdata_a1_.type_id=5 and productdata_a1_.value='P1')
очевидно type_id никогда не собирается добиться успеха на and'd проверяет = 4 и = 5 ...
Что мне действительно нужно, так это два внутренних присоединения к product_data ... не могу понять, как это сделать.
Я попытался createAlias ("ИзделиеТехнический", "продукт - $ {индекс}") это дало org.hibernate.QueryException: дублированный путь ассоциации: ИзделиеТехнический
Я пытаюсь сделать это в критерии запроса, а не HQL. Я могу заставить его работать в HQL, но он построен в цикле (так что мне может понадобиться больше объединений в одну таблицу). Два «ins» не будут работать, потому что мне нужен a.type для выравнивания a.value и b.type для соответствия b.value ... не может иметь a.type, выравнивающийся с b.value. Например, [рубашка: синяя, брюки: зеленая] дала бы мне странную ProductData, если бы я искал некоторых Доменов, у которых была рубашка: зеленый – Trebla
... или с использованием данных моего образца [4: GC, 5: P1]. Мне нужны некоторые Домены, у которых есть продукт типа 4, со значением GC и тип 5, значение P1. В решении мне дали бы некоторые Домены с типом 4, значение P1, что неверно. – Trebla
Я мог бы попытаться вычислить запрос для вас в HQL (так как это то, что я использую большую часть времени в эти дни), но, как вы говорите, вы хотите его для запроса критериев. Лично я не вижу большой разницы. Созданные базовые запросы будут цитироваться close/similar. Если вам нужен запрос на критерии, я думаю, вам понадобится эксперт по этому вопросу. Удачи. – Vahid