Mais uma de LazyInicializationException

3 respostas
F

Pessoal, sou mais um que caiu nas garras do LazyInicializationException, já tentei várias soluções encontradas na web, mas ainda não consegui solucionar, no próprio site do Hibernate, a solução exposta, faz referência explícita à Session, SessionFactory, etc, e no projeto não uso isso, está totalmente baseado em anotações, os únicos xml, são: o persistence que tem 4 linhas, e o web.xml; estou usando Netbeans 6.9, GlassFish, JSF 2, EJB3, JPA2, Hibernate; já tentei tb as NamedQueries, mas, tb não funcionou; tb pode ser q esteja fazendo alguma coisa errada, então qualquer ajuda é bem-vinda.

O problema:

Possua uma entidade Pessoa, que se relaciona com EnderecoPessoa dessa forma:

@OneToMany(mappedBy = "pessoa",fetch=FetchType.EAGER)
	public List<EnderecoPessoa> getEnderecosPessoas() {

	    if (enderecosPessoas == null ){
			enderecosPessoas = new ArrayList<EnderecoPessoa>();
		}
		return enderecosPessoas;
	}

até ai funciona bem;

Tenho tb uma entidade Empresa q herda de Pessoa e se relaciona com Responsavel dessa forma:

@OneToMany(mappedBy = "empresa")
    public List<ResponsabilidadeTecnica> getResponsaveis() {
	if (responsaveis == null) {
	    responsaveis = new ArrayList<ResponsabilidadeTecnica>();
	}
	return responsaveis;
    }

    public void setResponsaveis(List<ResponsabilidadeTecnica> responsaveis) {
	this.responsaveis = responsaveis;
    }

o problema é que, se deixo LAZY, é gerada a exceção: org.hibernate.LazyInitializationException, se mudo pra EAGER, gera o erro de multiple bags.

Agradeço muito a quem puder ajudar.

3 Respostas

webdouglas

de uma olhada nesse post http://www.guj.com.br/posts/list/213140.java#1085202 provavelmente deve ser o mesmo problema.

lembrando que nunca pode ter dois atributos setados como EAGER na mesma classe e que para se utilizar o LAZY a sessão nao pode estar fechada!

até mais

F

Douglas, os erros de LazyInicialization e Multiple Bags, ocorrem quando clico no botão editar em um datatable, então resolvi colocar isso no botão:

só q tá dando erro de:

Obrigado.

webdouglas

Em que momento vc esta usando o Hibernate.initialize(…) ??? Voce deve utiliza-lo antes de fechar a sessao!

ou pode ser que vc esteja utilizando um coleçao associado ao objeto da lista “empresa.getResponsaveis()”, caso isso seja verdadeiro tem que utilizar o Hibernate.initialize(…) para essa coleçao tb!

se voce puder passar o método que retorna o objeto empresa do BD e tb o metodo da acao editar do datatable, iria ajudar bastante!

falows!

Criado 3 de agosto de 2010
Ultima resposta 4 de ago. de 2010
Respostas 3
Participantes 2