LazyInitializationExceptions in hibernate? I'm sure you have. :) This famous exception occurs if you try to access any non-initialized assocation (or proxy) when the assigned hibernate session has already been closed.
There are many solutions for this problem, e.g. fetching the association directly via the hibernate query language. Think about a hibernate mapped entity
Customerwhich has a one-to-many relation to an
Orderentity. Both classes are mapped to different database tables with a foreign key constraint.
The following HQL query not only will select all customers from the database, in addition it will directly fetch all orders related to these customers:
select distinct c from Customer c left join fetch c.orders
Executing the HQL results in one SQL
SELECT. No further selects are executed on accessing the customers orders. So no
LazyInitializationExceptionwill ever be thrown if the hibernate session is closed already.
On the other side you have to pay attention when using
JOIN FETCHin combination with pagination (see
setMaxResults()). Hibernate isn't able to perform pagination on database-level while using
JOIN FETCH. This issue is related to the fact that
JOIN FETCHsql statements return multiple rows for the same entity. Therefor pagination will be performed in-memory which can result in bad database performance.