[Hibernate] Consultas HQL com joins retornando resultados repetidos  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline

Olá pessoal,

Quando uso join em HQL, ele está retornando na coleção várias referências do mesmo objeto, ao invés de retornar um único objeto.

Por que isso acontece? Como resolver este problema?

Vi que há um artigo na javamagazine no qual o autor sugere que se faça um for identificando os itens repetidos e os elimine. Mas isso me parece estranho.

E aí, o que vocês me dizem?

Obrigado.

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
guilherme.chapiewski
JavaEvangelist
[Avatar]

Membro desde: 09/01/2007 16:56:48
Mensagens: 310
Localização: Rio de Janeiro
Offline

Dependendo do tipo de join que você fizer e a quantidade de registros que tiver nas suas tabelas relacionadas é possível que isso aconteça.

Vou dar um exemplo tosco que é a primeira coisa que veio na cabeça.

Imagina que você tem uma tabela MATERIAS onde você tem uma relação de notícias de jornal e FOTOS onde você tem uma relação de fotos das matérias. A relação é 1:1, ou seja, para cada MATERIA você tem uma FOTO.

Aí você faz a consulta para obter a matéria com a foto:



Então, somente um registro deverá ser retornardo considerando que só foi cadastrada uma foto por matéria.

MAS, digamos que por acaso alguém cadastrou equivocadamente duas fotos para a mesma matéria (ou seja, dois registros na tabela FOTOS com o mesmo materia_id).

Neste caso a mesma query que retornou somente um registro passará a retornar dois.

É bem possível que o seu problema seja algo do tipo pois eu já usei Hibernate várias vezes e isso unnca me aconteceu.

Verifique suas queries e seus dados para ver se você não tem um problema deste tipo.

[ ]s, Guilherme Chapiewski

Guilherme Chapiewski
http://gc.blog.br - Blog sobre desenvolvimento de software e tecnologia
[Email] [WWW] [Yahoo!] [MSN]
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline

No meu caso, a consulta é assim:



A intenção é que ele retornasse uma coleção de CycleOccurrence com as coleções de RouteDates devidamente preenchidas.

Porém ele me retorna uma coleção com CycleOccurrence repetidos.

E aí?

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
Luiz Henrique Coura
Java Ninja
[Avatar]

Membro desde: 28/04/2004 21:03:05
Mensagens: 283
Localização: Lorena-SP
Offline

basta vc implementar os métodos equals e hashcode para q não haja repetição de objetos e:

List list = SeuDAO.seuMetodoQPegaOsDados(...);

Set set = new LinkedHahSet( list );

pronto!

sua coleção de objetos sem repetição.

"A única pergunta estúpida é aquela que você nunca faz"
Anônimo

Luiz Henrique Coura
[MSN]
fbrissi
Entusiasta Java
[Avatar]

Membro desde: 08/04/2010 09:39:45
Mensagens: 21
Localização: Bauru-SP
Offline

Sei que este post é antigo, mas caso ainda não tenha resolvido este caso, utilize a palavra distinct em sua HQL, isso fará com que o Hibernate não traga valores repetidos.

No exemplo acima por exemplo ficaria da seguinte forma.

[Email] [MSN]
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team