I have created a class in which I have set some of it's fields (other entities) to be LAZY loaded. Now I need to use this object after it has been detached from the session, so I obviously need to make sure all the fields that I need are populated before detaching it. I tried just calling the getters to these lazy fields but that didn't seem to work. Anyone have an idea how to force these fields to be loaded?
-
are you sure your session is open while calling getters ?Jigar Joshi– Jigar Joshi2010-10-05 10:16:05 +00:00Commented Oct 5, 2010 at 10:16
-
Session if definitely open when I call the gettersClinton Bosch– Clinton Bosch2010-10-05 10:57:47 +00:00Commented Oct 5, 2010 at 10:57
4 Answers
Hibernate.initialize(yourObject)
will force-initialize the object/collection that is passed to it. You need an active session for this.
If the entity is detached, you'd have to re-attach the object (using merge(..)) to an active session and then initialize it.
3 Comments
merge is just for some very special cases. As a rule of a thumb I'd recomment updatemerge(..) can insert a new record as well. But I'm more used to the JPA semantics, so it might be a bit different here.<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
you can add this line into your configuration file,it can fetch your lazy objects even it is detached,but it should be use post 4.1.7 version as there are some connection leakage issue with previous version.see here
Comments
I know that you asked for Hibernate but EclipseLink has this feature so it might be worth checking out if you are using JPA and not tied to a given implementation. You might run into other problems migrating to EclipseLink though..