Repetição de dados com Hibernate

8 respostas
renatoramiro

Oi pessoal,

Estou tentando fazer uma busca dos dados com Hibernate através do Criteria, até ai tudo bem.
No meu banco de dados tenho uma tabela de CDs e outra com MUSICAS. Fiz um relacionamento um-para-muitos.

Na minha tabela de CDs só tem dois cds cadastrados, mas quando eu executo a busca, aparecem quatro cds, sendo a repetição
de cada cd duas vezes.

O código está assim:

Criteria c = (Criteria) session.createCriteria(Musica.class).add(Restrictions.ilike("nome", "%Music%"));
List<Musica> lista = c.list();
System.out.println(lista.size());
for (Musica m : lista) {
      System.out.println("\n-------- CD/DVD --------");
      System.out.println("ID: " + m.getCdDvd().getCdDvdId());
      System.out.println("Título: " + m.getCdDvd().getTitulo());
      System.out.println("Gravadora: " + m.getCdDvd().getGravadora());
      System.out.println("Ano: " + m.getCdDvd().getAno());
      System.out.println("Título do CD: " + m.getCdDvd().getTitulo());
      System.out.println("\n-------- MÚSICAS --------");
      for (Musica musica : m.getCdDvd().getMusicas()) {
          System.out.println(musica.getNome());
      }
}

Existe alguma forma dessa repetição não acontecer?

Valeu!

8 Respostas

Hebert_Coelho

Não entendi para que o código: Restrictions.ilike("nome", "%Music%")

renatoramiro

Eu estava vendo uns exemplos na net e achei isso.

Mas entendi que posso fazer somente uma Query normal.

Query q = session.createQuery("from Musica as m where m.nome like :busca");
q.setString("busca", "%Mus%");

Mas o problema ainda persiste. Repetições dos mesmos dados.

Hebert_Coelho

Talvez não seja o problema, mas eu volto a te perguntar…

para que esse comando?

renatoramiro

Para setar a busca. Vou pegar essa busca de um JTextField e vou chamar o método para retornar um ArrayList para popular uma JTable.

Hebert_Coelho

Mas atualmente você não ta setando nada aí. Apenas marretando o valor %Mus%.

Se vc for pelo database mesmo, e fizer um select * from, é certo que ele retorne apenas 2 linhas? Se vc retirar essa condição, where, ele volta quantas linhas?

renatoramiro

A Tabela CD tem dois registros

/*************************/
Tabela CD
/*************************/
ID - Titulo
1 - Primeiro CD
2 - Segundo CD

/*************************/
Tabela Musica
/*************************/
ID - CD_ID - Nome
1  - 1     - Musica 1
2  - 1     - Musica 2

Só o CD 1 tem música.

Hebert_Coelho

Se você executa apenas como está abaixo. oq ele traz de resposta?

E depois faça um System.out.println(); no tananho total da lista. veja o que ele vai trazer.

renatoramiro

Apareceu 2

Criado 31 de outubro de 2011
Ultima resposta 1 de nov. de 2011
Respostas 8
Participantes 2