[RESOLVIDO] recuperar dados dos relacionamentos

13 respostas
Jr_webmaster_100_jav

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

13 Respostas

drsmachado

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.

Jr_webmaster_100_jav

Onde fazer isso ? desculpe a pergunta.

Obs:. Estou utilizando hibernate com JPA

Hebert_Coelho

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).

Jr_webmaster_100_jav

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

Hebert_Coelho

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

Vem como uma PersistenceBag pois é isso que ele é aos olhos do JPA/Hibernate.

Você tentou iterar sobre essa lista? Teve alguma mensagem de erro?

Jr_webmaster_100_jav

tentei fazer assim…

this.comissoes = this.vendedor.getComissoes();

atribuindo… mas nao deu certo.

vou tentar percorrer o persistencebag

ja posto aqui o q deu

Hebert_Coelho

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

Pq não deu certo? Algum erro?

Jr_webmaster_100_jav

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

Hebert_Coelho

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

Quatro soluções para LazyInitializationException [=

Jr_webmaster_100_jav

resolvi cara... muuuuuuuuuuito obrigado mesmo.
Que Deus te abencoe.

resolucao:

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;
}

Carregar coleção por Join Query foi minha solucao.

Obg amigo, forte abraco

Jr_webmaster_100_jav

so uma duvida… se tiver duas list no objeto pai ? como faz o hql ?

por tem ainda os enderecos

Jr_webmaster_100_jav

tentei colocar join fetch v.enderecos junto do hql acima e ai deu um:

cannot simultaneously fetch multiple bags

Jr_webmaster_100_jav

resolvi o problema…

da seguinte maneira:

select v from Vendedor v fetch all properties where v.iD = :codigo

Criado 11 de maio de 2012
Ultima resposta 11 de mai. de 2012
Respostas 13
Participantes 3