Como efetuar uma consulta hibernate many-to-many com restricoes

4 respostas
cadusanvido

Olá pessoal,

estou com o seguinte problema, tenho uma tabela de motor e uma tabela peças, onde há um relacionamento n pra n entre as duas.

O meu problema é o seguinte:

Preciso fazer uma busca nessas tabelas com a seguinte condicao:

Trazer todos os motores que contem as peças, por exemplo, buscar todos os motores que tem carburador, pistao, radiador… etc…

caso exista cadastrado um motor apenas com pistao e radiador esta busca tem que retornar vazio…

Pessoal agradeco desde ja.

4 Respostas

MauNunes

Olá cadusanvido, blz ?
Cara para vc fazer esse tipo de coisa, vc terá q utilizar o Criteria do hibernate. Não é difícil não, é bem simples…
Se quiser posso te ajudar. Vc só me precisa me passar algumas informações.

Abraços.

Mauricio Nunes
www.iride.com.br

_fs

Não testei:

Criteria criteria = session.createCriteria( Motor.class );
criteria.add( Restrictions.conjunction()
    .add( Restriction.in( "pecas", new Carburador() )
    .add( Restriction.in( "pecas", new Pistao() )
    .add( Restriction.in( "pecas", new Radiador() )
);

conjunction() seria como fazer um “and” em todas as restrictions adicionadas depois.

cadusanvido

Ola Mauricio, tudo blz?

Cara eu usei o Criteria, mas estou fazendo alguma coisa errada que na minha condicao ele retorna quando existe uma informacao que satisfaca o criteria, por exemplo: se tento buscar um motor com 3 pecas, e tem no banco apenas uma ele retorna este registro.

O que eu quero é que retorne apenas os registros que satisfaca as 3 condicoes, um bom exemplo para o que eu estou querendo fazer é uma busca de carros onde vc queira todos os carros com air bag, ar condicionado e etc… trazendo os carros com estes opcionais, caso nao tenha o opcional escolhido nao traga na busca.

Mas quais são as informacoes que vc está querendo?

Obrigado,

Abracos, Cadu.

cadusanvido

Olá Lipe,

testei o seu codigo com algumas alteracoes:

criteria.add( Restrictions.conjunction()

.add( <a href="http://Restriction.in">Restriction.in</a>( “pecas”, new Collection() )

);

mesmo assim nao funcionou, no collection inserir varios objetos pecas, pois ocorreu um erro de incompatibilidade.

Valeu.

Criado 9 de agosto de 2007
Ultima resposta 13 de ago. de 2007
Respostas 4
Participantes 3