Outofmemory error in hibernate persisten set
--------------------------------------------
Key: HHH-4031
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4031
Project: Hibernate Core
Issue Type: Bug
Environment: Oracle 10.
Reporter: Shripad
Priority: Blocker
I am getting outofmemory error in my java application. On analyzing heapdump of the
application , I find that presistent set object of hibernate is consuming nearly 1 GB
heapspace.
Following are the mapping files I am using. EMSDataRecord class holds above mentioned set
containing objects of EventRecords( Mapping file for this is pasted below EMSDataRecord).
Primary key for EMSDataRecord is RECORD_ID. There is one to many relation in
EMSDataRecord and EventRecord. I checked in the database. For one entry of EMSDataRecord
, there are not more than 2 entries of EventRecords. So there is no reason why the set
should be so huge. Is this a bug in hibernate?
<?xml version="1.0"?
<!DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
<hibernate-mapping
<class
name="EMSDataRecord"
table="EM1_RECORD"
dynamic-update="true"
<id
name="RecordId"
type="java.lang.Long"
column="RECORD_ID"
<generator class="assigned" /
</id
<!-- Please do not change the order of the fields CR005--
<property
name="StreamName"
type="java.lang.String"
column="STREAM_NAME"
update="false"
/
<property
name="OriginatingSystem"
type="java.lang.String"
column="ORIGINATING_SYSTEM"
update="false"
/
<property
name="DestinationSystem"
type="java.lang.String"
column="DESTINATION_SYSTEM"
update="false"
/
<property
name="LayoutName"
type="java.lang.String"
column="LAYOUT_NAME"
update="false"
/
<property
name="ErrorCode"
type="java.lang.String"
column="ERROR_CODE"
update="false"
/
<property
name="ErrorDesc"
type="java.lang.String"
column="ERROR_DESC"
update="false"
/
<property
name="ErrorTimestamp"
type="java.util.Date"
column="ERROR_TIMESTAMP"
update="false"
/
<property
name="EventTimestamp"
type="java.util.Date"
column="EVENT_TIMESTAMP"
update="false"
/
<property
name="ResolutionStatus"
type="java.lang.Integer"
column="RESOLUTION_STATUS"
/
<property
name="ResolutionReason"
type="java.lang.Integer"
column="RESOLUTION_REASON"
/
<property
name="RecordStatus"
type="java.lang.Integer"
column="RECORD_STATUS"
/
<property
name="LockStatus"
type="java.lang.Integer"
column="LOCK_STATUS"
/
<property
name="RejectionRemark"
type="java.lang.String"
column="REJECTION_REMARK"
/
<property
name="AssignmentRuleId"
column="ASSIGNMENT_RULE_ID"
type="java.lang.Long"
/
<property
name="CorrectionRuleId"
column="CORRECTION_RULE_ID"
type="java.lang.Long"
/
<property
name="GroupId"
type="java.lang.Long"
column="GROUP_ID"
/
<property
name="UserId"
type="java.lang.Long"
column="USER_ID"
/
<property
name="TeamId"
type="java.lang.Long"
column="TEAM_ID"
/
<property
name="RecordType"
type="java.lang.Integer"
column="RECORD_TYPE"
/
<!-- Performance Improvement - Save Without BLOB Change -
Added additional attribute to make the attribute read only--
<property
name="FieldsMap"
type="binary"
column="FIELD_MAP"
update="false"
/
<property
name="LastUpdTimeStamp"
type="java.util.Date"
column="LAST_UPD_TIMESTAMP"
insert="false"
/
<set name="EventRecords" lazy="false" cascade="none"
inverse = "true" where = "event_type=504"
<key
<column name="RECORD_ID" /
</key
<one-to-many class="EventRecord"/
</set
</class
</hibernate-mapping
<?xml version="1.0"?
<!DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
<hibernate-mapping
<class
name="EventRecord"
table="EM1_EVENT"
<id
name="EventId"
type="java.lang.Long"
column="EVENT_ID"
unsaved-value="any"
<generator class="sequence"
<param
name="sequence">SEQ_EVENT_ID</param
</generator
</id
<property
name="RecordId"
type="java.lang.Long"
column="RECORD_ID"
update="false"
/>
<property
name="EventType"
type="java.lang.Integer"
column="EVENT_TYPE"
update="false"
/
<property
name="ChangedField"
type="java.lang.String"
column="CHANGED_FIELD"
update="false"
/
<property
name="OldValue"
type="java.lang.String"
column="OLD_VALUE"
update="false"
/
<property
name="NewValue"
type="java.lang.String"
column="NEW_VALUE"
update="false"
/
<property
name="ChangeTimestamp"
type="java.util.Date"
column="CHANGE_TIMESTAMP"
update="false"
insert="false"
/
<property
name="UserId"
type="java.lang.Long"
column="USER_ID"
update="false"
/>
<property
name="ChangeReason"
type="java.lang.Integer"
column="CHANGE_REASON"
update="false"
/>
</class
</hibernate-mapping
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira