Fixed
Details
Assignee
Brett MeyerBrett MeyerReporter
Joel BagleyJoel BagleyLabels
Components
Fix versions
Priority
Minor
Details
Details
Assignee
Brett Meyer
Brett MeyerReporter
Joel Bagley
Joel BagleyLabels
Components
Fix versions
Priority
Created April 25, 2014 at 12:59 PM
Updated May 5, 2022 at 10:45 AM
Resolved May 5, 2022 at 10:45 AM
The fix implemented for issue in org.hibernate.engine.jdbc.internal.ResultSetReturnImpl performs an instanceof check on the statement object to determine if the current statement is an instance of CallableStatement. This presents a potential problem if a framework wraps a statement object in either a proxy or a concrete class that implements both PreparedStatement and CallableStatement.
This can result in wrapped/proxied PreparedStatement objects being incorrectly identified as CallableStatement instances with the end result often being a ClassCastException, AbstractMethodError, or NoSuchMethodException error in the wrapper or proxy.
Since JDK 6 is now a minimum requirement it seems like a more compatible fix would have been to call java.sql.Wrapper.isWrapperFor(CallableStatement.class) method on the statement object to determine the instance type instead of using the instanceof keyword. While I'm not stating that the implemented fix is technically wrong, I believe the use of Wrapper.isWrapperFor would promote improved compatibility across the greatest range of pooling frameworks, JDBC drivers, etc.
Improvement Suggestion:
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.java