[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1312?page=c...
]
Christian Gruber commented on HHH-1312:
---------------------------------------
Hi!
I'd also vote for closing the ResultSet, since
- hygiene is never a bad thing ;-)
- for bulk inserts with MySQL, this is a big memory leak
When I alter IdentityGenerator.GetGeneratedKeysDelegate.executeAndExtract() so that the
ResultSet from GetGeneratedKeysHelper.getGeneratedKey(insert) is closed in a finally
block, the memory leak vanishes (this applies to Hibernate 3.2.4). I don't know
whether this is a specific problem of the MySQL JDBC driver (I use version 5.0.5), but as
the additional code does not seem to hurt, I'd suggest to put it into the next
Hibernate version.
Greetings,
Christian
Unclosed ResultSet when using Identity
--------------------------------------
Key: HHH-1312
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1312
Project: Hibernate3
Issue Type: Bug
Components: core
Affects Versions: 3.1 rc2, 3.1 rc3, 3.1
Environment: JBoss 4.0.3SP1
Hibernate 3.1rc2
Java 1.5.0_06
MSSQLServer 2000
Reporter: Michael Samblanet
Priority: Minor
The code around AbstractEntityPersister.java line 1969 obtains a result set using
GetGeneratedKeysHelper.getGeneratedKey
but the result set is never closed by this function nor the functions it calls. The
issue was exposed by the
message below in JBoss 4.0.3 SP1.
This is an EJB3 application on JBoss using MSSQLServer 2000 and we are persisting an
object with a primary key using an
identity data type.
A review of the Hibernate 3.1 source code seems to indicate it has the same issue.
11:29:30,817 WARN [WrappedConnection] Closing a result set you left open! Please close
it yourself.
java.lang.Throwable: STACKTRACE
at
org.jboss.resource.adapter.jdbc.WrappedStatement.registerResultSet(WrappedStatement.java:572)
at
org.jboss.resource.adapter.jdbc.WrappedStatement.getGeneratedKeys(WrappedStatement.java:501)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.hibernate.util.GetGeneratedKeysHelper.getGeneratedKey(GetGeneratedKeysHelper.java:59)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1969)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2404)
at
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at
org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at
org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at
org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:590)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:568)
at
org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:130)
at
org.jboss.ejb3.entity.InjectedEntityManager.persist(InjectedEntityManager.java:97)
<snip>
--
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