Hi all,
I am using Hibernate for ORM.
Right now i am monitoring my application using JProfiler.
Here, i run my application and monitoring instances which are not garbage
collected.
In one flow of my application, i have found that hibernate is instantiating
objects on the basis of available records in
corrosponding table.
For example, I have tried to load *BaseListing class* which is child of *
UserDtls* and when i load
BaseListing like as given below (DAO layer code snippet).
*baseListing = (BaseListing)getHibernateTemplate().load(BaseListing.*
*class, listingId);*
Here, it loads *baselisting* with all its containing objects including
UserDtls where returned UserDtls object is one
but in jprofiler it shows 32 UserDtls allocations (Instance Allocations, *here
UserDtls table has 32 records*) whereas
in baseListing it has loaded only one instance*.*
**
So JProfiler shows me this 32 as a non-GCed objects.
Can anybody tell me that why hibernate is loading (creating instances of)
UserDtls on the basis of available records into the UserDtls
even in baseListing it is assigning one instance of UserDtls.
(The mapping files are as given below)
i.e
I have two classes BaseListing and UserDtls.
Following is a configuration snippet of both
*BaseListing.hbm.xml*
<class name="test.BaseListing" table="base_listing"
lazy="false">
.........................
<many-to-one name="userDtls" class="test.UserDtls"
lazy="false">
<column name="USER_ID" />
</many-to-one
....................
</class>
</hibernate-mapping>
*UserDtls.hbm.xml*
<class name="test.UserDtls" table="user_dtls"
lazy="false" >
...........................
<set name="baseListings" inverse="true"
fetch="select">
<key>
<column name="USER_ID" />
</key>
<one-to-many class="test.BaseListing" />
</set<key>
....................
</class>
</hibernate-mapping>
Here,can any body tell me how can i make hibernate to load only required 1
instance
rather than unnecessary 32 instances of UserDtls.
Regards,
Manish
Show replies by date