pessoal tenho a entidade vendedor e comissoes
o vendedor tem muitas comissoes OneToMany
ao inserir ele insere tranquilo, mas o problema esta em fazer a consulta, recuperar o objeto.
usando lazy ele nao traz a list de comissoes no vendedor
e usando eager ele duplica a entidade pai ( se o vendedor tem 3 comissoes, ele traz 3 registros vendedor )
…
nunca trabalhei com hibernate com relacionamentos e isso ta me tirando o sono.
alguem teria um exemplo como fazer ?
Atenciosamente
Lazy indica que ele não carregará as informações do relacionamento, no exato momento da pesquisa. Tente dar um Hibernate.initialize(entity) para ver se muda alguma coisa, usando Lazy.
Onde fazer isso ? desculpe a pergunta.
Obs:. Estou utilizando hibernate com JPA
Esse tutorial pode te ajudar: @OneToMany e @ManyToOne Unidirecional e Bidirecional.
A configuração lazy vai dentro da anotação @OneToMany. Como um parâmetro (fetchType se não me engano).
Agradecido pelo tutorial, mas o que mostra la eu ja fiz que e somente a parte de persistir os objetos no banco.
tenho a entidade vendedor, endereco e comissao
onde um vendedor tem um endereco e varias comissoes.
insere normal no banco de dados
o problema e ao recuperar o objeto…
a List que se encontra no vendedor volta como uma PersistenceBag .
e nao vem como uma lista com os dados
[quote=Jr webmaster 100% java]Agradecido pelo tutorial, mas o que mostra la eu ja fiz que e somente a parte de persistir os objetos no banco.
tenho a entidade vendedor, endereco e comissao
onde um vendedor tem um endereco e varias comissoes.
insere normal no banco de dados
o problema e ao recuperar o objeto…
a List que se encontra no vendedor volta como uma PersistenceBag .
e nao vem como uma lista com os dados [/quote]Vem como uma PersistenceBag pois é isso que ele é aos olhos do JPA/Hibernate.
Você tentou iterar sobre essa lista? Teve alguma mensagem de erro?
tentei fazer assim…
this.comissoes = this.vendedor.getComissoes();
atribuindo… mas nao deu certo.
vou tentar percorrer o persistencebag
ja posto aqui o q deu
[quote=Jr webmaster 100% java]tentei fazer assim…
this.comissoes = this.vendedor.getComissoes();
atribuindo… mas nao deu certo.
vou tentar percorrer o persistencebag
ja posto aqui o q deu[/quote]Pq não deu certo? Algum erro?
quando tento percorrer a lista ele da a seguinte exception
failed to lazily initialize a collection of role: org.smartgestor.cadastro.Vendedor.comissoes, no session or session was closed
[quote=Jr webmaster 100% java]quando tento percorrer a lista ele da a seguinte exception
failed to lazily initialize a collection of role: org.smartgestor.cadastro.Vendedor.comissoes, no session or session was closed
[/quote]Quatro soluções para LazyInitializationException [=
resolvi cara… muuuuuuuuuuito obrigado mesmo.
Que Deus te abencoe.
resolucao:
[code]
public Vendedor recuperaVendedor(long codigo)
{
Vendedor vend;
Query query = EntityManagerUtil.getEntityManager().createQuery("select v from Vendedor v join fetch v.comissoes where v.iD = :codigo");
query.setParameter("codigo", codigo);
vend = null;
try {
vend = (Vendedor)query.getSingleResult();
} catch (Exception e) {
// TODO: handle exception
}
return vend;
} [/code]
Carregar coleção por Join Query foi minha solucao.
Obg amigo, forte abraco
so uma duvida… se tiver duas list no objeto pai ? como faz o hql ?
por tem ainda os enderecos
tentei colocar join fetch v.enderecos junto do hql acima e ai deu um:
cannot simultaneously fetch multiple bags
resolvi o problema…
da seguinte maneira:
select v from Vendedor v fetch all properties where v.iD = :codigo