<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
        <base href="https://hibernate.atlassian.net"> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0" bgcolor="#f5f5f5"> 
            <!-- header here --> 
            <tbody>
                <tr> 
                    <td id="header-pattern-container" style="padding: 0; border-collapse: collapse; padding: 10px 20px"> 
                        <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                            <tbody>
                                <tr> 
                                    <td id="header-avatar-image-container" valign="top" style="padding: 0; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px" width="32"> <img id="header-avatar-image" class="image_fix" src="https://avatar-cdn.atlassian.com/7447b128f8696bc3b6c2982269c8bed7?s=48&amp;d=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F7447b128f8696bc3b6c2982269c8bed7%3Fd%3Dmm%26s%3D48%26noRedirect%3Dtrue" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top"> </td> 
                                    <td id="header-text-container" valign="middle" style="padding: 0; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="rdearnaley" id="email_rdearnaley" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=rdearnaley" style="color:#6c797f;; color: #3b73af; text-decoration: none">Roger Dearnaley</a> <strong>updated</strong> an issue </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="email-content-container" style="padding: 0; border-collapse: collapse; padding: 0 20px"> 
                        <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; border-spacing: 0; border-collapse: separate"> 
                            <tbody>
                                <tr> 
                                    <!-- there needs to be content in the cell for it to render in some clients --> 
                                    <td class="email-content-rounded-top mobile-expand" style="padding: 0; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 15px; background-color: #ffffff; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly" height="10" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="page-title-pattern-first-line " style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; padding-top: 10px"> <a href="https://hibernate.atlassian.net/browse/HHH" style="color: #3b73af; text-decoration: none">Hibernate ORM</a> / <a href="https://hibernate.atlassian.net/browse/HHH-12727" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-ff78f240-9a3b-474d-9bda-d78a6c2d2f6a" height="16" width="16" border="0" align="absmiddle" alt="Improvement" style="vertical-align: text-bottom"></a> <a href="https://hibernate.atlassian.net/browse/HHH-12727" style="color: #3b73af; text-decoration: none">HHH-12727</a> </td> 
                                                </tr> 
                                                <tr> 
                                                    <td style="vertical-align: top;; padding: 0; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-12727" style="color: #3b73af; text-decoration: none">Performance issue in ResourceRegistryStandardImpl.register lines 67, 70</a> </span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand  wrapper-special-margin" style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; padding-top: 10px; padding-bottom: 5px" bgcolor="#ffffff"> 
                                        <table class="keyvalue-table" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Change By:</th> 
                                                    <td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <a class="user-hover" rel="rdearnaley" id="email_rdearnaley" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=rdearnaley" style="color:#6c797f;; color: #3b73af; text-decoration: none">Roger Dearnaley</a> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand  issue-description-container" style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; padding-top: 5px; padding-bottom: 10px" bgcolor="#ffffff"> 
                                        <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0; border-collapse: collapse; padding: 0 0 10px"> <span class="diffaddedchars" style="background-color:#ddfade;">"</span> <span class="diffcontext">While using the YourKit performance monitoring tool I found two hotspots in file hibernate-core/src/main/java/org/hibernate/resource/jdbc/internal/ResourceRegistryStandardImpl.java function register(Statement statement, boolean cancelable) lines 67-70 at the first and last lines (67 and 70) inside Object.hashCode():</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tif</span> <span class="diffcontext"> ( xref.containsKey( statement ) ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;throw</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tthrow</span> <span class="diffcontext"> new HibernateException(</span> <span class="diffaddedchars" style="background-color:#ddfade;"> \</span> <span class="diffcontext"> "JDBC Statement already registered</span> <span class="diffaddedchars" style="background-color:#ddfade;">\</span> <span class="diffcontext">" );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;xref</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\txref</span> <span class="diffcontext">.put( statement, null );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>There</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\nThere</span> <span class="diffcontext"> are two problems here:</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>a</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\na</span> <span class="diffcontext">) on the no-exception-thrown code path both the containsKey( statement ) and .put( statement, null ) hash the Statement object -- hashing it twice is wasteful</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>b</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\nb</span> <span class="diffcontext">) the Statement object (which in our particular case is a com.zaxxer.hikari.pool.HikariProxyPreparedStatement wrapping a com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement) is large and has a lot of fields,</span> <span class="diffaddedchars" style="background-color:#ddfade;"> making is slow to hash. Worse,</span> <span class="diffcontext"> some of</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> which</span> <span class="diffaddedchars" style="background-color:#ddfade;"> the fields</span> <span class="diffcontext"> seem to be to do with current status rather than identity, which could</span> <span class="diffaddedchars" style="background-color:#ddfade;"> potentially</span> <span class="diffcontext"> cause cache misses in the xref hash. If possible, it would be much more efficient to override the default behavior of .hashCode() and .equals() for implementations of Statement to only take into account fields that describe identity, rather than current status. In particular, if an implementation of Statement already has a functional unique identifier, both .hashCode() and .equals() should depend just on that. In our particular case, statement.connection.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">traceId</span> <span class="diffaddedchars" style="background-color:#ddfade;">traceID</span> <span class="diffcontext"> and statement.delegate.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">traceId</span> <span class="diffaddedchars" style="background-color:#ddfade;">traceID</span> <span class="diffcontext"> look like they might be unique identifiers. I understand that handling this correctly might require work from the HikariCP connection pool and/or the Microsoft JDBC driver code as well as or instead of from Hibernate.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>Issue</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\nIssue</span> <span class="diffcontext"> a) can be fixed by changing the code lines above to:</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;Set</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tSet</span> <span class="diffcontext">&lt;ResultSet&gt; already = xref.put( statement, Collections.EMPTY_SET );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tif</span> <span class="diffcontext"> ( already != null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;xref</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\txref</span> <span class="diffcontext">.put( statement, already );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;throw</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tthrow</span> <span class="diffcontext"> new HibernateException(</span> <span class="diffaddedchars" style="background-color:#ddfade;"> \</span> <span class="diffcontext"> "JDBC Statement already registered</span> <span class="diffaddedchars" style="background-color:#ddfade;">\</span> <span class="diffcontext">" );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>thus</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\nthus</span> <span class="diffcontext"> avoiding hashing twice on the no-exception-thrown code path, and also changing hibernate-core/src/main/java/org/hibernate/resource/jdbc/internal/ResourceRegistryStandardImpl.java function release(Statement statement) lines 81-92 from:</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;// Keep this at DEBUG level, rather than warn.&nbsp;&nbsp;Numerous connection pool implementations can return a</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;// proxy/wrapper around the JDBC Statement, causing excessive logging here.&nbsp;&nbsp;See HHH-8210.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tif</span> <span class="diffcontext"> ( log.isDebugEnabled() &amp;&amp; !xref.containsKey( statement ) ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;log</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tlog</span> <span class="diffcontext">.unregisteredStatement();</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;else</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\telse</span> <span class="diffcontext"> {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;final</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tfinal</span> <span class="diffcontext"> Set&lt;ResultSet&gt; resultSets = xref.get( statement );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tif</span> <span class="diffcontext"> ( resultSets != null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;closeAll</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\tcloseAll</span> <span class="diffcontext">( resultSets );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;xref</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\txref</span> <span class="diffcontext">.remove( statement );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>to</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\nto</span> <span class="diffcontext">:</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;final</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tfinal</span> <span class="diffcontext"> Set&lt;ResultSet&gt; resultSets = xref.get( statement );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tif</span> <span class="diffcontext"> ( resultSets != null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;closeAll</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tcloseAll</span> <span class="diffcontext">( resultSets );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;} else if ( log.isDebugEnabled() ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;// Keep this at DEBUG level, rather than warn.&nbsp;&nbsp;Numerous connection pool implementations can return a</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;// proxy/wrapper around the JDBC Statement, causing excessive logging here.&nbsp;&nbsp;See HHH-8210.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;log</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tlog</span> <span class="diffcontext">.unregisteredStatement();</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t</span> <span class="diffcontext">&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;xref</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\txref</span> <span class="diffcontext">.remove( statement );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext"> and changing function register(ResultSet resultSet, Statement statement) lines 203-213 from:</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tif</span> <span class="diffcontext"> ( statement != null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;// Keep this at DEBUG level, rather than warn.&nbsp;&nbsp;Numerous connection pool implementations can return a</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;// proxy/wrapper around the JDBC Statement, causing excessive logging here.&nbsp;&nbsp;See HHH-8210.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tif</span> <span class="diffcontext"> ( log.isDebugEnabled() &amp;&amp; !xref.containsKey( statement ) ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;log</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\tlog</span> <span class="diffcontext">.debug(</span> <span class="diffaddedchars" style="background-color:#ddfade;"> \</span> <span class="diffcontext"> "ResultSet statement was not registered (on register)</span> <span class="diffaddedchars" style="background-color:#ddfade;">\</span> <span class="diffcontext">" );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;Set</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tSet</span> <span class="diffcontext">&lt;ResultSet&gt; resultSets = xref.get( statement );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tif</span> <span class="diffcontext"> ( resultSets == null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultSets</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n \t\t\t\tresultSets</span> <span class="diffcontext"> = new HashSet&lt;ResultSet&gt;();</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;xref</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\txref</span> <span class="diffcontext">.put( statement, resultSets );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br>to</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\nto</span> <span class="diffcontext">:</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\tif</span> <span class="diffcontext"> ( statement != null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;Set</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tSet</span> <span class="diffcontext">&lt;ResultSet&gt; resultSets = xref.get( statement );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tif</span> <span class="diffcontext"> ( resultSets == null ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;&nbsp;// Keep this at DEBUG level, rather than warn.&nbsp;&nbsp;Numerous connection pool implementations can return a</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;&nbsp;// proxy/wrapper around the JDBC Statement, causing excessive logging here.&nbsp;&nbsp;See HHH-8210.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\tif</span> <span class="diffcontext"> ( log.isDebugEnabled() ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\t\tlog</span> <span class="diffcontext">.debug(</span> <span class="diffaddedchars" style="background-color:#ddfade;"> \</span> <span class="diffcontext"> "ResultSet statement was not registered (on register)</span> <span class="diffaddedchars" style="background-color:#ddfade;">\</span> <span class="diffcontext">" );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;resultSets</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\tresultSets</span> <span class="diffcontext"> = Collections.EMPTY_SET;</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;if</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\tif</span> <span class="diffcontext"> ( resultSets == Collections.EMPTY_SET ) {</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;resultSets</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\tresultSets</span> <span class="diffcontext"> = new HashSet&lt;ResultSet&gt;();</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br>&nbsp;&nbsp;&nbsp;&nbsp;xref</span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t\txref</span> <span class="diffcontext">.put( statement, resultSets );</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n\t\t\t</span> <span class="diffcontext">&nbsp;&nbsp;&nbsp;}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n</span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"><br></span> <span class="diffaddedchars" style="background-color:#ddfade;">\r\n"</span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> <script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "EmailMessage",
  "description": "View Issue",
  "potentialAction": {
    "@type": "ViewAction",
        "target": "https://hibernate.atlassian.net/browse/HHH-12727?inbox=true&",
    "name": "View Issue"
      },
  "publisher": {
    "@type": "Organization",
    "name": "Atlassian",
    "url": "https://www.atlassian.com"
  }
}
</script> 
                                        <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="actions-pattern-container" valign="middle" style="padding: 0; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                                        <table align="left" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                                            <tbody>
                                                                <tr> 
                                                                    <td class="actions-pattern-action-icon-container" style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-12727#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-d031ee97-168a-417a-b614-d738c5b858d7" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle"> </a> </td> 
                                                                    <td class="actions-pattern-action-text-container" style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://hibernate.atlassian.net/browse/HHH-12727#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> </td> 
                                                                </tr> 
                                                            </tbody>
                                                        </table> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <!-- there needs to be content in the cell for it to render in some clients --> 
                                <tr> 
                                    <td class="email-content-rounded-bottom mobile-expand" style="padding: 0; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #ffffff; border-top: 0; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly" height="5" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="footer-pattern" style="padding: 0; border-collapse: collapse; padding: 12px 20px"> 
                        <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                            <tbody>
                                <tr> 
                                    <td id="footer-pattern-mobile-separated-links" class="mobile-resize-text" width="100%" colspan="2" style="padding: 0; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> Get Jira notifications on your phone! Download the Jira Cloud app for <a href="https://play.google.com/store/apps/details?id=com.atlassian.android.jira.core&amp;referrer=utm_source%3DNotificationLink%26utm_medium%3DEmail" style="color: #3b73af; text-decoration: none">Android</a> or <a href="https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&amp;ct=EmailNotificationLink&amp;mt=8" style="color: #3b73af; text-decoration: none">iOS</a> 
                                        <hr> </td> 
                                </tr> 
                                <tr> 
                                    <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> This message was sent by Atlassian Jira <span id="footer-build-information">(v1001.0.0-SNAPSHOT#100087-<span title="e140a91dd8a50060630b1d20053c109ba3065be4" data-commit-id="e140a91dd8a50060630b1d20053c109ba3065be4}">sha1:e140a91</span>)</span> </td> 
                                    <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                        <table style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="footer-pattern-logo-desktop-padding" style="padding: 0; border-collapse: collapse; padding-top: 3px; opacity: 0.150"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-26c00ca0-9576-4bbb-9d9b-b728d025713a" alt="Atlassian logo" title="Atlassian logo" width="192" height="24" class="image_fix"> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
            </tbody>
        </table>   
    </body>
</html>