GUJ Discuss√Ķes ¬† : ¬† √ļltimos t√≥picos ¬† | ¬† categorias ¬† | ¬† GUJ Respostas

Hibernate - could not initialize proxy - no Session


#1

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


#2

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


#3

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?


#4

N√£o foi dado Fetch ou Join na tabela que possui o campo necess√°rio.


#5

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


#6

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


#7

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


#8

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!


#9

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


#10

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.


#11

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


#12

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


#13

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

#14

O meu problema foi resolvido com essa dica!!

Obrigado


#15

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


#16

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


#17