Hibernate traz valores repetidos

11 respostas
Luiz_Gustavo

Caros,

Estou utilizando o Hibernate em um projeto, e estou tendo o seguinte problema:

Tenho um relacionamento Pais (1) -> Estado (N), onde, portanto, um País pode ter vários estados.
O problema é que quando cadastro mais de um estado para um país, ao listar os países aqueles q possuem mais de um estado vem repetidos, na proporção de estados, ex: cadastro Minas Gerais e Paraná para Brasil, e ao listar os países, Brasil aparece duas vezes.
O que reparei é que, no mapeamento do VO de Pais (gerei os VO’s automaticamente pelo Netbeans, a partir do meu banco) se deixo:

@OneToMany(mappedBy = "staCountry", fetch=FetchType.EAGER)

acima da coleção de Estados dá esse problema, mas se deixo:

@OneToMany(mappedBy = "staCountry", fetch=FetchType.LAZY)

o problema não ocorre, mas também não tenho a coleção de estados inicializada…

alguém tem alguma idéia do que seja?
se for preciso posto aqui os VO’s

[]'s e feliz ano novo a todos

11 Respostas

F

Não sei se entendi a sua duvida.

Mas acredito que falte um distinct na sua query.

Luiz_Gustavo

fdalmarco:
Não sei se entendi a sua duvida.

Mas acredito que falte um distinct na sua query.

Um, vou tentar isso…
Mas é comum acontecer isso, pois no banco o país fica cadastrado exatamente uma vez, mas só ao listar é que ele aparece repetido na proporção de estados…

[]'s

Luiz_Gustavo

outro detalhe… estou usando critéria…
se for preciso mudo para sql mesmo…

[]'s

marcelo_mococa

vc está usando list ou set?

tente usar um list… ou então converter o set em um list.

Luiz_Gustavo

vamos ver se ajuda…

estou usando o seguinte método (genérico) para listar os itens das tabelas:

public Collection listar(Class tabela) throws Exception{
        Collection objects = null;
        try{
            Session hibernate = HibernateUtil.getSessao();
            Criteria criteria = hibernate.createCriteria(tabela);
            objects = criteria.list();
            HibernateUtil.fechaSessao();
        } catch(Exception e){
            HibernateUtil.aborta();
            throw new Exception(e);
        }
        return objects;
    }
Luiz_Gustavo

marcelo_mococa:
vc está usando list ou set?

tente usar um list… ou então converter o set em um list.

olá Marcelo,

então, foi gerado automaticamente como Collection:

@OneToMany(mappedBy = "staCountry", fetch=FetchType.EAGER)    
private Collection<State> stateCollection;
marcelo_mococa

intaum…
faça o cast para um ArrayList.

acho q vai resolver…

Luiz_Gustavo

marcelo_mococa:
intaum…
faça o cast para um ArrayList.

acho q vai resolver…

Marcelo,

mudei aqui para List:

@OneToMany(mappedBy = "staCountry", fetch=FetchType.LAZY)    
    private List<State> stateCollection;

mas o bendito ainda faz a mesma coisa… mas e mudo de EAGER para LAZY ele me traz apenas um país (como deveria ser) mas não inicializa o List de Estados…

F
Criteria crit = session.createCriteria(Product.class);
        crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

Isso deve resolver.

Luiz_Gustavo

fdalmarco:
Criteria crit = session.createCriteria(Product.class); crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

Isso deve resolver.

Perfeito!!!
Deu certo.
Muito obrigado!

F

De nada.

:lol:

Criado 3 de janeiro de 2007
Ultima resposta 3 de jan. de 2007
Respostas 11
Participantes 3