Org.hibernate.LazyInitializationException: could not initialize proxy - no Session

4 respostas
d34d_d3v1l

Galera,

tenho uma classe com a seguinte anotação na classe Mensagem:

@Any(metaColumn = @Column(name = "tipo_autenticavel"), optional = false, fetch=FetchType.EAGER	)
	@AnyMetaDef(idType = "integer", metaType = "string", metaValues =
	{
			@MetaValue(value = "A", targetEntity = Aluno.class),
			@MetaValue(value = "P", targetEntity = Professor.class),
			@MetaValue(value = "F", targetEntity = Funcionario.class) })
	@JoinColumn(name = "codigo_autenticavel")
	private Autenticavel remetente;

Quando eu faço, vejam no comentario onde dá erro:

for(Mensagem m : mensagens){
			Autenticavel a = m.getRemetente(); //ok 

			if(a instanceof Aluno){
				System.out.println("ALUNO");
			}
			if(a instanceof Professor){
				System.out.println("PROFESSOR");
			}
			if(a instanceof Funcionario){
				System.out.println("FUNCIONARIO");
			}
			
                       //todos esses IFs acima, ok.. ele identifica qual o tipo da interface.

			System.out.println(a.getId());  //ERRO AQUI
			System.out.println(a.getType());
			
			if(m.getRemetente().getId() == this.getId() && m.getRemetente().getType() == this.getType() ){
				msgs.add(m);
			}
		}

A mensagem de erro é:

Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

podem ajudar?

4 Respostas

Hebert_Coelho

Se você deixar a conexão aberta, esse acontece do mesmo modo?

Uma outra coisa. Eu estava lendo um livro onde dizia que o EAGER funcionar como queremos é opcional. Geralmente funciona como queremos.

Talvez essa anotação que você está a utilizar seja ignorada ao ser carregada.

Tente fazer por namedQuery.

d34d_d3v1l

desculpa a ignorancia, mas não sou experiente em hibernate.

O namedQuery irá carregar o atributo do banco automaticamente quando trazer o objeto, ou ela é executada como um ‘método’ ?

Hebert_Coelho

d34d_d3v1l:
desculpa a ignorancia, mas não sou experiente em hibernate.

O namedQuery irá carregar o atributo do banco automaticamente quando trazer o objeto, ou ela é executada como um ‘método’ ?

Você dispara a query, e não é automático como um get().

d34d_d3v1l

obrigado…
ainda nao resolvi o problema, mas qqer coisa posto o feedback aqui

Criado 23 de junho de 2012
Ultima resposta 23 de jun. de 2012
Respostas 4
Participantes 2