Skip to content

Commit e8c392b

Browse files
dreab8sebersole
authored andcommitted
HHH-19280 ResourceRegistryStandardImpl#close(java.sql.Statement) is called on already closed statements
1 parent a9fbad8 commit e8c392b

File tree

5 files changed

+13
-17
lines changed

5 files changed

+13
-17
lines changed

hibernate-core/src/main/java/org/hibernate/generator/values/internal/GeneratedValuesHelper.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class GeneratedValuesHelper {
7979
*/
8080
public static GeneratedValues getGeneratedValues(
8181
ResultSet resultSet,
82+
PreparedStatement statement,
8283
EntityPersister persister,
8384
EventType timing,
8485
SharedSessionContractImplementor session) throws SQLException {
@@ -98,7 +99,7 @@ public static GeneratedValues getGeneratedValues(
9899
}
99100

100101
final GeneratedValuesImpl generatedValues = new GeneratedValuesImpl( generatedProperties );
101-
final Object[] results = readGeneratedValues( resultSet, persister, mappingProducer, session );
102+
final Object[] results = readGeneratedValues( resultSet, statement, persister, mappingProducer, session );
102103

103104
if ( LOG.isDebugEnabled() ) {
104105
LOG.debug( "Extracted generated values for entity "
@@ -125,22 +126,17 @@ public static GeneratedValues getGeneratedValues(
125126
*/
126127
private static Object[] readGeneratedValues(
127128
ResultSet resultSet,
129+
PreparedStatement statement,
128130
EntityPersister persister,
129131
JdbcValuesMappingProducer mappingProducer,
130132
SharedSessionContractImplementor session) {
131133
final ExecutionContext executionContext = new BaseExecutionContext( session );
132134

133-
final DirectResultSetAccess directResultSetAccess;
134-
try {
135-
directResultSetAccess = new DirectResultSetAccess(
135+
final DirectResultSetAccess directResultSetAccess = new DirectResultSetAccess(
136136
session,
137-
(PreparedStatement) resultSet.getStatement(),
137+
statement,
138138
resultSet
139139
);
140-
}
141-
catch (SQLException e) {
142-
throw new HibernateException( "Could not retrieve statement from generated values result set", e );
143-
}
144140

145141
final JdbcValues jdbcValues = new JdbcValuesResultSetImpl(
146142
directResultSetAccess,

hibernate-core/src/main/java/org/hibernate/id/insert/AbstractSelectingDelegate.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ protected void bindParameters(Object entity, PreparedStatement ps, SharedSession
5555
/**
5656
* Extract the generated key value from the given result set after execution of {@link #getSelectSQL()}.
5757
*/
58-
private GeneratedValues extractReturningValues(ResultSet resultSet, SharedSessionContractImplementor session)
58+
private GeneratedValues extractReturningValues(ResultSet resultSet, PreparedStatement statement, SharedSessionContractImplementor session)
5959
throws SQLException {
60-
return getGeneratedValues( resultSet, persister, getTiming(), session );
60+
return getGeneratedValues( resultSet, statement, persister, getTiming(), session );
6161
}
6262

6363
@Override
@@ -98,7 +98,7 @@ public GeneratedValues performMutation(
9898

9999
final ResultSet resultSet = session.getJdbcCoordinator().getResultSetReturn().extract( idSelect, idSelectSql );
100100
try {
101-
return extractReturningValues( resultSet, session );
101+
return extractReturningValues( resultSet, idSelect, session );
102102
}
103103
catch (SQLException e) {
104104
throw jdbcServices.getSqlExceptionHelper().convert(
@@ -154,7 +154,7 @@ public final GeneratedValues performInsertReturning(String sql, SharedSessionCon
154154
bindParameters( binder.getEntity(), idSelect, session );
155155
final ResultSet resultSet = jdbcCoordinator.getResultSetReturn().extract( idSelect, selectSQL );
156156
try {
157-
return extractReturningValues( resultSet, session );
157+
return extractReturningValues( resultSet, idSelect, session );
158158
}
159159
finally {
160160
jdbcCoordinator.getLogicalConnection().getResourceRegistry().release( resultSet, idSelect );

hibernate-core/src/main/java/org/hibernate/id/insert/GetGeneratedKeysDelegate.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public GeneratedValues performMutation(
106106
try {
107107
final ResultSet resultSet = preparedStatement.getGeneratedKeys();
108108
try {
109-
return getGeneratedValues( resultSet, persister, getTiming(), session );
109+
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
110110
}
111111
catch (SQLException e) {
112112
throw jdbcServices.getSqlExceptionHelper().convert(
@@ -158,7 +158,7 @@ public GeneratedValues executeAndExtractReturning(
158158
try {
159159
final ResultSet resultSet = preparedStatement.getGeneratedKeys();
160160
try {
161-
return getGeneratedValues( resultSet, persister, getTiming(), session );
161+
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
162162
}
163163
catch (SQLException e) {
164164
throw jdbcServices.getSqlExceptionHelper().convert(

hibernate-core/src/main/java/org/hibernate/id/insert/InsertReturningDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ protected GeneratedValues executeAndExtractReturning(
8383

8484
final ResultSet resultSet = jdbcCoordinator.getResultSetReturn().execute( preparedStatement, sql );
8585
try {
86-
return getGeneratedValues( resultSet, persister, getTiming(), session );
86+
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
8787
}
8888
catch (SQLException e) {
8989
throw jdbcServices.getSqlExceptionHelper().convert(

hibernate-core/src/main/java/org/hibernate/id/insert/SybaseJConnGetGeneratedKeysDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public GeneratedValues executeAndExtractReturning(
4949

5050
ResultSet resultSet = jdbcCoordinator.getResultSetReturn().execute( preparedStatement, sql );
5151
try {
52-
return getGeneratedValues( resultSet, persister, getTiming(), session );
52+
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
5353
}
5454
catch (SQLException e) {
5555
throw jdbcServices.getSqlExceptionHelper().convert(

0 commit comments

Comments
 (0)