<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
    #email-body { min-width: 30em !important; }
    #email-page { padding: 8px !important; }
    #email-banner { padding: 8px 8px 0 8px !important; }
    #email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
    #email-fields { padding: 0 8px 8px 8px !important; }
    #email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
    <tr valign="top">
        <td id="email-page" style="padding:16px !important;">
            <table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
                <tr valign="top">
                    <td bgcolor="#3e4c4e" style="background-color:#3e4c4e;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="https://www.jboss.org/dms/hibernate/images/jira/jiraheader_hibernate.png" alt="" style="vertical-align:top;" /></td>
                </tr><tr valign="top">
    <td id="email-banner" style="padding:32px 32px 0 32px;">
        
                
        
        
            <table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
                                        <img id="email-avatar" src="https://hibernate.onjira.com/secure/useravatar?avatarId=10162" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
                        <div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
                                    <a class="user-hover" rel="pierrepost" id="email_pierrepost" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=pierrepost" style="color:#6c797f;">Pierre Post</a>
     created <img src="https://hibernate.onjira.com/images/icons/bug.gif" height="16" width="16" border="0" align="absmiddle" alt="Bug"> <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HHH-7984'>HHH-7984</a>
            </div>
                        <div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
                <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HHH-7984'><strong>Prepared statement for callable returning cursor not closed</strong></a>
            </div>
                    </td>
    </tr>
</table>
    </td>
</tr>
<tr valign="top">
    <td id="email-fields" style="padding:0 32px 32px 32px;">
        <table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
            <tr valign="top">
                <td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
                <td>
                    <table border="0" cellpadding="0" cellspacing="0" width="100%">
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Issue Type:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                <img src="https://hibernate.onjira.com/images/icons/bug.gif" height="16" width="16" border="0" align="absmiddle" alt="Bug">        Bug
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Affects Versions:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    4.1.9            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Assignee:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    Unassigned            </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Attachments:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    BOTEMPLATE.PKG_BOT_TESTS.pck,                     BOT_TEST_NUMVALUE.sql,                     CursorFromCallableTest.java,                     CursorFromCallableTest.log,                     NumValue.java,                     persistence.xml            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Components:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    entity-manager            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Created:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        11/Feb/13 9:02 AM
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Description:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        <p style='margin-top:0;margin-bottom:10px;'>After migrating from Hibernate 3.6 to 4.1.9, the following use case fails with ORA-01000: maximum open cursors exceeded.</p>

<p style='margin-top:0;margin-bottom:10px;'>We have a PL/SQL package <tt>PKG_BOT_TESTS</tt> with a simple function <tt>f_test_ReturnNonEmptyCursor</tt> returning a cursor with 2 lines where the columns can be mapped to the table <tt>BOT_TEST_NUMVALUE</tt>:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>BOTEMPLATE.PKG_BOT_TESTS.pck</b></div><div class="codeContent panelContent">
<pre class="code-sql">CREATE OR REPLACE PACKAGE PKG_BOT_TESTS IS
  
  FUNCTION f_test_ReturnNonEmptyCursor RETURN SYS_REFCURSOR;

END PKG_BOT_TESTS;
/
CREATE OR REPLACE PACKAGE BODY PKG_BOT_TESTS IS

  FUNCTION f_test_ReturnNonEmptyCursor RETURN SYS_REFCURSOR IS
    l_Cursor SYS_REFCURSOR;
  BEGIN
    OPEN l_Cursor FOR
      <span class="code-keyword">SELECT</span> 1 AS BOT_NUM,
             'Line 1' AS BOT_VALUE
      <span class="code-keyword">FROM</span>   DUAL
      UNION
      <span class="code-keyword">SELECT</span> 2 AS BOT_NUM,
             'Line 2' AS BOT_VALUE
      <span class="code-keyword">FROM</span>   DUAL;
    RETURN(l_Cursor);
  END f_test_ReturnNonEmptyCursor;

END PKG_BOT_TESTS;
/</pre>
</div></div>

<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>BOT_TEST_NUMVALUE.sql</b></div><div class="codeContent panelContent">
<pre class="code-sql">create table BOT_TEST_NUMVALUE
(
  bot_num   NUMBER(16) not null,
  bot_value VARCHAR2(255)
)
 
alter table BOT_TEST_NUMVALUE
  add constraint PK_NUM primary key (BOT_NUM);</pre>
</div></div>

<p style='margin-top:0;margin-bottom:10px;'>The data class that maps this table looks like this:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>NumValue.java (excerpt)</b></div><div class="codeContent panelContent">
<pre class="code-java">@Entity
@Table(name=<span class="code-quote">"BOT_NUMVALUE"</span>)
@NamedNativeQueries({
    @NamedNativeQuery(name=<span class="code-quote">"NumValue.getSomeValues"</span>,
            query = <span class="code-quote">"{ ? = call BOTEMPLATE.PKG_BOT_TESTS.f_test_ReturnNonEmptyCursor() }"</span>,
            resultClass=NumValue.class, hints={@QueryHint(name=<span class="code-quote">"org.hibernate.callable"</span>, value=<span class="code-quote">"<span class="code-keyword">true</span>"</span>)})
})
<span class="code-keyword">public</span> class NumValue {
    @Id
    @Column(name=<span class="code-quote">"BOT_NUM"</span>, nullable=<span class="code-keyword">false</span>)
    <span class="code-keyword">private</span> <span class="code-object">long</span> num;
    @Column(name=<span class="code-quote">"BOT_VALUE"</span>)
    <span class="code-keyword">private</span> <span class="code-object">String</span> value;

    <span class="code-keyword">public</span> <span class="code-object">long</span> getNum() {
        <span class="code-keyword">return</span> num;
    }

    <span class="code-keyword">public</span> void setNum(<span class="code-object">long</span> num) {
        <span class="code-keyword">this</span>.num = num;
    }

    <span class="code-keyword">public</span> <span class="code-object">String</span> getValue() {
        <span class="code-keyword">return</span> value;
    }

    <span class="code-keyword">public</span> void setValue(<span class="code-object">String</span> value) {
        <span class="code-keyword">this</span>.value = value;
    }
}</pre>
</div></div>

<p style='margin-top:0;margin-bottom:10px;'>As mentioned, the following test works fine with Hibernate 3.6 but fails with Hibernate 4.1.9 (<tt>ORA-01000: maximum open cursors exceeded</tt>):</p>

<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>CursorFromCallableTest.java</b></div><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">public</span> class CursorFromCallableTest {

    @Test
    <span class="code-keyword">public</span> void testGetObjectListFromCallableCursor_X500() <span class="code-keyword">throws</span> Exception {
        Properties emfProps = <span class="code-keyword">new</span> Properties();
        emfProps.setProperty(<span class="code-quote">"hibernate.connection.url"</span>, <span class="code-quote">"..."</span>);
        emfProps.setProperty(<span class="code-quote">"hibernate.connection.username"</span>, <span class="code-quote">"..."</span>);
        emfProps.setProperty(<span class="code-quote">"hibernate.connection.password"</span>, <span class="code-quote">"..."</span>);

        EntityManagerFactory emf = Persistence.createEntityManagerFactory(<span class="code-quote">"CursorFromCallableTest"</span>, emfProps);
        EntityManager context = <span class="code-keyword">null</span>;
        <span class="code-keyword">try</span> {
            context = emf.createEntityManager();

            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; 500; i++) {
                Assert.assertEquals(2, getObjectListFromCalleableCursor(context).size());
            }

        } <span class="code-keyword">finally</span> {
            <span class="code-keyword">if</span> (context != <span class="code-keyword">null</span>) {
                context.close();
            }
            emf.close();
        }
    }

    <span class="code-keyword">private</span> List&lt;NumValue&gt; getObjectListFromCalleableCursor(EntityManager context) {
        TypedQuery&lt;NumValue&gt; query = context.createNamedQuery(<span class="code-quote">"NumValue.getSomeValues"</span>, NumValue.class);
        <span class="code-keyword">return</span> query.getResultList();
    }
}</pre>
</div></div>

<p style='margin-top:0;margin-bottom:10px;'>This is the JUnit stack trace:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">javax.persistence.QueryTimeoutException: could not execute query
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1339)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:273)
        at CursorFromCallableTest.getObjectListFromCalleableCursor(CursorFromCallableTest.java:40)
        at CursorFromCallableTest.testGetObjectListFromCalleableCursor_X500(CursorFromCallableTest.java:27)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.hibernate.QueryTimeoutException: could not execute query
        at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:151)
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
        at org.hibernate.loader.Loader.doList(Loader.java:2519)
        at org.hibernate.loader.Loader.doList(Loader.java:2502)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332)
        at org.hibernate.loader.Loader.list(Loader.java:2327)
        at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
        at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1783)
        at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:231)
        at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:157)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
        ... 24 more
Caused by: java.sql.SQLException: ORA-01000: maximum open cursors exceeded
ORA-06512: at <span class="code-quote">"BOTEMPLATE.PKG_BOT_TESTS"</span>, line 37
ORA-06512: at line 1

        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
        at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204)
        at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1041)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
        at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
        at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4714)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376)
        at com.mchange.v2.c3p0.impl.NewProxyCallableStatement.execute(NewProxyCallableStatement.java:3044)
        at org.hibernate.dialect.Oracle8iDialect.getResultSet(Oracle8iDialect.java:516)
        at org.hibernate.engine.jdbc.internal.proxy.CallableStatementProxyHandler.executeQuery(CallableStatementProxyHandler.java:56)
        at org.hibernate.engine.jdbc.internal.proxy.CallableStatementProxyHandler.continueInvocation(CallableStatementProxyHandler.java:52)
        at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
        at $Proxy13.executeQuery(Unknown Source)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:2031)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1832)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
        at org.hibernate.loader.Loader.doQuery(Loader.java:899)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
        at org.hibernate.loader.Loader.doList(Loader.java:2516)
        ... 32 more</pre>
</div></div>

<p style='margin-top:0;margin-bottom:10px;'>The test may depend on your Oracle configuration of the maximum number of cursors. The number of iterations should be greater than the configured limit.</p>

<p style='margin-top:0;margin-bottom:10px;'>Please also note the attached <tt>CursorFromCalleable.log</tt> file. The information from c3p0 about the multiple prepared statement indicates Hibernate has not closed the prepared statement from the previous call as noted in <tt><a href="https://forum.hibernate.org/viewtopic.php?f=1&amp;t=942656">https://forum.hibernate.org/viewtopic.php?f=1&amp;t=942656</a></tt>.</p>

<p style='margin-top:0;margin-bottom:10px;'>I may supply additional information if needed. Thank you!</p>
    </td>
</tr>
                                                <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Environment:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        Hibernate 4.1.9 Final
<br/>
Oracle JDBC Thin Driver 11.2.0.3
    </td>
</tr>
                                                <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Project:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        <a style="color:#6c797f;" href="https://hibernate.onjira.com/browse/HHH">Hibernate ORM</a>
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Labels:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    query
            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Priority:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                <img src="https://hibernate.onjira.com/images/icons/priority_critical.gif" height="16" width="16" border="0" align="absmiddle" alt="Critical">        Critical
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Reporter:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                                        <a class="user-hover" rel="pierrepost" id="email_pierrepost" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=pierrepost" style="color:#6c797f;">Pierre Post</a>
                </td>
</tr>                                                    
    
    
                        </table>
                </td>
            </tr>
        </table>
    </td>
</tr>













            </table>
        </td><!-- End #email-page -->
    </tr>
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
            This message is automatically generated by JIRA.<br />
            If you think it was sent incorrectly, please contact your JIRA administrators<br />
            For more information on JIRA, see: <a style='color:#6c797f;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
        </td>
    </tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->