Boa tarde.
Estou com um problemas em realizar uma consulta, o problema esta descrito abaixo.
A consulta a ser realizada é:
Qual foi o CLIENTE que comprou os seguintes PRODUTOS:
Camisa Levis(id = 2), Calça conduta(id = 3) e Camisa calvin klein(id = 5)
Tenho 3 tabelas: Produto, Venda e Cliente.
Relacionamentos:
Produto 1:N Venda
Cliente 1:N Venda
Eu fiz a consulta com esse metodo:
public List<Cliente> listarClientesQueCompraramProdutos(List<Long> idsProdutos){
DetachedCriteria dc = DetachedCriteria.forClass(Venda.class);
dc.createAlias("produto", "p");
dc.add(Restrictions.in("p.id", idsProdutos));
dc.setProjection(Projections.property("cliente"));
return listar(dc);
}
A consulta estatica em SQL ficaria assim:
SELECT c.id, c.nome
FROM produto as p
INNER JOIN venda as v ON p.id = v.produto_id
INNER JOIN cliente as c ON c.id = v.cliente_id
WHERE produto_id IN ( 2, 3, 5 )
O problema é que essa consulta me traz todos clientes que compraram qualquer um dos três produtos,
mais eu quero os que compraram todos os 3 produtos.
A clausula IN() faz um OR entre os elementos, mais pra funcionar deveria ser um AND,
mais eu não consegui fazer essa consulta, tentei de todas as formas, usei group by, distinct e não funcionou.
Alguém já realizou esse tipo de consulta e tem ela em Java/Criteia ou Hql ?
Obrigado.