Excessao Hibernae: failed to lazily initialize a collection of role

5 respostas
mateusviccari

Olá, tenho uma classe NotaFiscal e uma NotaFiscalItem, os relacionamentos estão definidos da seguinte forma:
Na NotaFiscal:

@OneToMany(mappedBy = "notaFiscal")
    List<NotaFiscalItem> item=new ArrayList<>();

Na NotaFiscalItem:

@ManyToOne
    private NotaFiscal notaFiscal;

E está me dando esse erro “failed to lazily initialize a collection of role” quando eu tento percorrer os itens da nota, ja descobri a causa é que o relacionamento oneToMany da notaFiscal é do tipo Lazy, então ele não carrega os itens da nota junto com a nota. E quando eu vou tentar acessá-los a session ja está fechada.
Como posso resolver isso sem ter que deixar a sessão aberta ou mudar o rlacionamento pra Eager?

5 Respostas

Hebert_Coelho

Esse post aqui vai te ajudar: Quatro soluções para LazyInitializationException.

mateusviccari

O meu sistema é desktop…
Vou fazer um método que armazenasse ass sessions para cada janela aberta, e somente fecharia as sessions quando eu clicasse no botão “fechar” de cada janela…
Pois usar query pra cada consulta fica inviavel

Hebert_Coelho

Bem, aí fica a sua escolha. Dos exemplos lá listados, apenas o do EJB não funcionaria em um sistema desktop.

Mesmo você fazendo cache você terá que inicializar a lista em algum momento. [=

Diabo_Loiro

mto bom o post hebert

Hebert_Coelho

Diabo Loiro:
mto bom o post hebert
Opa!
Valeu pelo apoio! [=

Criado 21 de maio de 2012
Ultima resposta 3 de out. de 2012
Respostas 5
Participantes 3