Hibernate - could not initialize proxy - no Session

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

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

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?

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

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

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á?

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

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!

1 curtida

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

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.

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

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!!!

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(); // só para inicializar os atributos.
		session.flush();
		session.close();
		return e;
	}

[quote=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!

[/quote]

O meu problema foi resolvido com essa dica!!

Obrigado

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

2 curtidas

[quote=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. =)[/quote]

Isso funcionou também aqui! Valeu pela ajuda!

1 curtida