Quatro soluções para LazyInitializationException

Olá, tudo bem?

No post de hoje veremos como tratar o famoso erro LazyInitializationException. Vamos ver 4 modos de evitar que esse erro aconteça, a vantagem e a desvantagem de cada abordagem e ao final, veremos comentários sobre o modo de como o EclipseLink trata essa situação.

Para simular e tratar o LazyInitializationException iremos utilizar um projeto EJB 3 com JSF 2.

O que veremos no post de hoje:

  • Página 3: Entenda o problema, por que o erro LazyInitializationException acontece?
  • Página 4: Carregar coleção por anotação
  • Página 5: Carregar coleção por Open Session in View (Transaction View)
  • Página 6: Carregar coleção por Stateful EJB com PersistenceContextType.EXTENDED
  • Página 7: Carregar coleção por Join Query
  • Página 8: Considerações sobre EclipseLink

Ao final do post você irá encontrar o código para download.

Atenção: Para esse post foi utilizado um código bem simples, e que não utiliza padrões de projeto. O foco desse post é destacar as soluções para o LazyInitializationException.

Apesar do exemplo que é utilizado nesse post ter sido criado com JSF + EJB, as soluções aqui se aplicam para o tratamento em qualquer ferramenta web. Tanto JSF, JSP com Servlets, JSP com Struts, JSP com VRaptor, etc.

O único exemplo que não é aplicável para a tecnologia JSE (em geral definido como Desktop) é a solução do EJB.

Four solutions to the LazyInitializationException

Hello, how are you?

In the post today we will talk about the common LazyInitializationException error. We will see four ways to avoid this error, the advantage and disadvantage of each approach and in the end of this post, we will talk about how the EclipseLink handles this exception.

To see the LazyInitializationException error and to handle it, we will use an application JSF 2 with EJB 3.

Topics of the post:

  • Page 3: Understanding the problem, Why does LazyInitializationException happen?
  • Page 4: Load collection by annotation
  • Page 5: Load collection by Open Session in View (Transaction in View)
  • Page 6: Load collection by Stateful EJB with PersistenceContextType.EXTENDED
  • Page 7: Load collection by Join Query
  • Page 8: EclipseLink and lazy collection initialization

At the end of this post you will find the source code to download.

Attention: In this post we will find an easy code to read that does not apply design patterns. This post focus is to show solutions to the LazyInitializationException.

The solutions that you will find here works for web technology like JSP with Struts, JSP with VRaptor, JSP with Servlet, JSF with anything else.

The only page code that does not apply to JSE (usually Desktop applications) is the Page 6 with EJB.