I went through the Hibernate Tutorial at http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html and got the question which fetch strategy among select or Join is better and we should go for. I know most of the guys will say it depends upon your requirement.But in most of the web applications we have common requirements i.e performance should be good. Here is my understanding :-
Lazy/Select Fetch strategy:- Select Fetch strategy is the lazy fetching of associations. The purpose of Lazy strategy is memory optimization . When I say memory optimization it means it means it saves us from heap error. This is what I think. So we can say yes if we are loading too objects in aseesion we should go for
Lazy Fetch strategy but in terms of time performance it does not provide any Benefit. Agreed?
Eager/Join Fetch strategy:- Join Fetch strategy the eager fetching of associations.The purpose of Join Fetch strategy is optimization in terms of time.I mean even associations are fetched right at the time of fetching parent object. So in this case we don’t make database call again and again . So this will be much faster.Agreed that this will bad if we are fetching too many objects in a session because we can get java heap error.
So now can we say in the hibernate session where we are not loading too many objects we should go for Eager fetch as it will be much better in terms of time response(Any ways memory will be reclaimed by garbage collector once we close the session)?
Go for
Joinif you need the data to be loaded andSelectif you usually don’t need it.About the
Java Heap Errordo not worry too much. You must be loading tons of objects. You can set up thebatch size. The load of the object is not the only strategy.If you do not need to load all objects you can add specific
HQLor Criterias.If you need more than you don’t the object go for
JoinotherwiseSelect.