Sobes.tech
Junior — Middle

In what situations can a LazyInitializationException occur in Hibernate?

sobes.tech AI

Answer from AI

The LazyInitializationException in Hibernate occurs when there is an attempt to access a lazily loaded collection or object outside the context of an active Hibernate session.

For example, if you have an entity with a lazy association (e.g., @OneToMany(fetch = FetchType.LAZY)), and you load this entity in one session, then close the session, trying to access this associated collection will cause a LazyInitializationException, because Hibernate cannot load data without an open session.

Typical situations:

  • Accessing lazy fields after the session has been closed.
  • Passing an entity from the DAO layer to the service or controller layer where the session is already closed.

To avoid this error, you can:

  • Use fetch = FetchType.EAGER (but this may impact performance).
  • Explicitly initialize lazy collections within the session (e.g., using Hibernate.initialize() or calling getters).
  • Use the Open Session in View pattern, which keeps the session open during the request.
  • Use join fetch queries to load related data immediately.