FindAll many-to-many
24/07/2016 16:09
Receita.executeQuery('select r from Receita r where :ingrediente1 in elements(u.ingredientes) and :ingrediente2 in elements(u.ingredientes) ... :ingredienteN in elements(u.ingredientes)', [ingrediente1: ovo, ingrediente2; farinha, ...., ingredienteN: leite])
Uma outra forma seria, para cada ingrediente, consultar todas as receitas que utilizam aquele ingrediente, e aí calcular a interseção de todas as listas:
def receitasComFarinha = ...
def receitasComOvo = ...
def receitasComLeite = ...
def receitasComFarinhaOvoLeite = receitasComFarinha.intersect(receitasComOvo).intersect(receitasComLeite);
def results = Receita.withCriteria {
eq "nome", "Pudim de leite"
ingredientes {
in "ovo", "açucar", "leite" // podendo ser um list com seus ingredientes (variavel também pode ir ai)
}
}
def ingredientesList = ["ovo", "açucar", "leite"]
def results = Receita.withCriteria {
eq "nome", "Pudim de leite"
ingredientes {
in ingredientesList // podendo ser um list com seus ingredientes (variavel também pode ir ai)
}
}
Para se registrar, clique aqui.