This week's giveaway is in the EJB and other Java EE Technologies forum. We're giving away four copies of EJB 3 in Action and have Debu Panda, Reza Rahman, Ryan Cuprak, and Michael Remijan on-line! See this thread for details.
(I also posted this on a jboss jpa forum and haven't received a response yet, so trying here as well...)
I'm new to JPA (and Hibernate for that matter. Come from iBATIS background.)
Take a case where you have a Company object which contains a List of Employees, and each Employee object has List of Address objects and List of Preferences (Address and Preference would be another domain models.)
I obviously don't want to to return some of the nested items all of the time, so lazy seems to be fine for the nested collections, and typically I suppose I should use 'join fetch' to pull back some of the nested items. However, in the Employee object there are two Collections and I've read it's not a good idea (if even possible?) to join fetch two different collections within the same object.
My question is how can I force the lazy loading of some objects so that they are all populated without traversing the entire nested structure and having to call the getter on the lazy fields just to get them populated?
It looks like in Hibernate you can call Hibernate.initialize(yourObject.getYourCollection) and it will initialize the lazy load of the objects, which is bit cleaner than yourObject.getYourCollection.size(). But not sure how to accomplish the same thing with just standard JPA syntax?
Also how does this work if you are nested more than one level and I need my nested lazy collections also populated? (For example maybe I need the whole object tree populated before sending it to the web tier or off to some other business process outside of the scope of my EntityManager.)
Maybe I can manually set the fetch type to Eager for those domain models before performing my specific query? I haven't seen an example of that done though.
Upto what extent does this initialize collection ?
What if the object in the collection contains another collection... ?
Joined: Oct 19, 2006
Remember we're using JPA, so there is no Hibernate.initialize.
Let's say, I've the following class design:
Every collection is lazy loaded by default.
I'd like to get all Roles of a particular User. The point is, each single Role returned must have it's Permissions eagerly loaded as well. The JPQL query:
must be changed to accomplish this.
I've tried different combinations with join fetch, with no success.