History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: HHH-1750
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Scott Marlow
Reporter: Andreas Dornhof
Votes: 11
Watchers: 3
Operations

If you were logged in you would be able to see more operations.
Hibernate Core

Exception ORA-01000 too many open cursors by generated="insert"

Created: 15/May/06 06:46 AM   Updated: 30/Jan/07 10:43 PM
Component/s: None
Affects Version/s: None
Fix Version/s: 3.2.0.cr4

Time Tracking:
Not Specified

File Attachments: 1. Text File HHH-1750.patch (2 kb)

Environment: Hibernate3, Oracle10g
Issue Links:
Fix


 Description  « Hide
When creating more as 300 Object in Oracle with insert="false" and generated="insert" by property - Tag in Mapping-File
causes an ORA-01000 "too many open cursors"...

It is executed using the following Java code:

SessionFactory sessionFactory;
    
     try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().
             configure().
             buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    
        try{
    
         for (int i = 0; i <= 301; i++) {
        
         Session session = sessionFactory.getCurrentSession();
         Transaction tx = session.beginTransaction();

Test test = new Test();
session.save(test);

tx.commit();

         }
    
} catch (Exception e) {
System.out.println(e.getMessage()+e.getClass().toString());
}
    
And Mapping - File:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>
<class
name="src.persistence.Test"
table="TEST"

>
<id name="id" type="java.lang.Long" column="ID"
>
<generator class="sequence">
<param name="sequence">TEST_SEQ</param>
</generator>
</id>

<property
name="created"
column="CREATED"
type="java.util.Date"
not-null="true"
insert="false"
update="false"
generated="insert"
>
</property>
</class>
</hibernate-mapping>


 All   Comments   Work Log   Change History   FishEye      Sort Order: Ascending order - Click to sort in descending order
Benoit Goudreault-Emond - 17/May/06 02:15 PM
I've tracked down the problem to AbstractEntityPersister's processGeneratedProperties() method. The ResultSet and PreparedStatement were being leaked.

The attached patch is applicable against 3.1.3. It works for me.

Benoit Goudreault-Emond - 04/Jul/06 08:47 AM
I've inspected the code in 3.2, and the bug is still there (unclosed PreparedStatement & ResultSet).

Would it be possible to apply the patch prior to the 3.2 release? It's a very simple patch, and I believe it's obvious that the ResultSet and PreparedStatement ought to be closed. Especially since it's done in every other method in AbstractEntityPersister. Leaving PreparedStatements unclosed is extremely bad when using Oracle--it will exhaust cursors very quickly.

I'd hate to have to recompile a custom hibernate version every time a new release comes out...

Scott Marlow - 01/Aug/06 08:00 PM
I Installed an Oracle 10G express server and was able to recreate the problem and verify that the patch does fix the issue. I want to check a few more things but will check the fix in soon.

Yes, I should be able to apply the patch before the 3.2 release.

Scott Marlow - 01/Aug/06 09:07 PM
The patch looks good, nice job! I applied it to the 3.2 branch and head.