Hibernate - could not initialize proxy - no Session

15 respostas
R

Ola, estou tendo um problema no hibernate e nao tenho ideia de porque esta ocorrendo esse erro:

09:15:11,883 ERROR LazyInitializationException:19 - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
	at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
	at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
	at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
	at org.iprogramming.model.persistence.dto.Person$$EnhancerByCGLIB$$4dfa7473.getName(<generated>)

Por favor, alguem pode me ajudar a resolver ?
Desde ja muito obrigado

15 Respostas

P

http://www.hibernate.org/43.html

H

bem, eu li toda essa pagina na pagina do hibernate mais não consegui resolver o meu problema

fica dizendo uma exceção do lazy e diz no session

acontece qd pego qq campo de um objeto, menos o id

pq isto esta acontecendo?

T

Não foi dado Fetch ou Join na tabela que possui o campo necessário.

N

http://www.guj.com.br/posts/list/78781.java

H

bem, esse seu topico foi de grande ajuda

acontece que estou fazendo varias tentativas e nada dando certo ainda

estou fazendo uma chamada aosatributos que eu uso e continua o mesmo erro.

não fechei a sessão no final e coninua dando o mesmo erro.

o que é estranho é que tenho varios metodos semelhantes, e somente esse da esse erro, pq será?

H

qd modifico fazendo a xamada do campos do objeto antes de fechar a sessao o erro “could not initialize proxy - no Session” fica dando agora na xamado do metodo para consultar a tabela e nao qd vou consultar algum campo do objeto

P

Ola Hammer e Ronildo

Essa exception ocorre porque voce fechou a sessão do hibernate (ou entitymanager do JPA usando hibernate). Provavelmente voces estao fechando a sessao/entityManager antes de renderizar a pagina, isso é, antes de fazer o dispatch!

H

bem, acontece q tenho uma classe dao q tem esse metodo que consulta a tabela do banco e retorna um list

na minha classe que tem os componentes swing eu xamo esse metodo e quando tento ver qualuer campo do objeto, menos o id, ele da esse erro

acontece q tenho varios metodos mt semelhantes, so mudando os objetos que sao retornados de acordo com oq eu kero, e soh esse esta dando problema, nada de muito difente

H

e como assim fechar a sessão antes de redenrizar a pagina?

ja tentei abrir uma sessao antes de chamar o metodo, e ainda continua dando o mesmo erro, sinceramente nao sei o que esta acontecendo.

H

como verifico se a pagina ja redenrizou? alguem pode me ajudar nesse caso?

K

Cara, é o seguinte…
Quando você faz um Select ou um List no Hibernate, a coleção retornada fica presa na sessão e só está populada enquando a sessão (SessionFactory) estiver aberta.

A solução que eu encontrei foi colocar a coleção em um objeto fora da Session factory.

Exemplo de Select:

public Papel Select(String pk) throws Exception{

Session session = factory.openSession();

Papel papel = (Papel)session.load(Papel.class, pk);

Papel ret = new Papel();

ret.setNome(papel.getNome());

ret.setDescricao(papel.getDescricao());

session.flush();

session.close();

return ret;

}
Exemplo de List:

public List<Papel> List(String condicao) throws Exception{

Session session = factory.openSession();

List<Papel> papeis = session.createQuery(condicao).list();

session.flush();

session.close();

return papeis;

}

I hope I’ve been helpfull, rsrsrs!!!

C

Olá,

Só pra compartilhar a minha resolução …
achei melhor fazer assim…
no meu caso estou usando um DAO generico…

public Entidade get(Class<? extends Entidade> cls, long id) {
		Session session = db.getSession();
		Entidade e = (Entidade) session.load(cls, id);
		e.toString(); //  para inicializar os atributos.
		session.flush();
		session.close();
		return e;
	}
J

Paulo Silveira:
Ola Hammer e Ronildo

Essa exception ocorre porque voce fechou a sessão do hibernate (ou entitymanager do JPA usando hibernate). Provavelmente voces estao fechando a sessao/entityManager antes de renderizar a pagina, isso é, antes de fazer o dispatch!

O meu problema foi resolvido com essa dica!!

Obrigado

R

Eu tive o mesmo problema e resolvi simplesmente mudando o FetchType de LAZY para EAGER na entidade:

@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "usuarioid", nullable = false) @NotNull public Usuario getUsuario() { return this.usuario; }
ai o erro parou de acontecer. =)

T

rycmaster:
Eu tive o mesmo problema e resolvi simplesmente mudando o FetchType de LAZY para EAGER na entidade:

@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "usuarioid", nullable = false) @NotNull public Usuario getUsuario() { return this.usuario; }
ai o erro parou de acontecer. =)

Isso funcionou também aqui! Valeu pela ajuda!

Criado 24 de maio de 2007
Ultima resposta 29 de out. de 2013
Respostas 15
Participantes 11