Skip to content

HHH-19280 ResourceRegistryStandardImpl#close(java.sql.Statement) is called on already closed statements #9928

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public class GeneratedValuesHelper {
*/
public static GeneratedValues getGeneratedValues(
ResultSet resultSet,
PreparedStatement statement,
EntityPersister persister,
EventType timing,
SharedSessionContractImplementor session) throws SQLException {
Expand All @@ -98,7 +99,7 @@ public static GeneratedValues getGeneratedValues(
}

final GeneratedValuesImpl generatedValues = new GeneratedValuesImpl( generatedProperties );
final Object[] results = readGeneratedValues( resultSet, persister, mappingProducer, session );
final Object[] results = readGeneratedValues( resultSet, statement, persister, mappingProducer, session );

if ( LOG.isDebugEnabled() ) {
LOG.debug( "Extracted generated values for entity "
Expand All @@ -125,22 +126,17 @@ public static GeneratedValues getGeneratedValues(
*/
private static Object[] readGeneratedValues(
ResultSet resultSet,
PreparedStatement statement,
EntityPersister persister,
JdbcValuesMappingProducer mappingProducer,
SharedSessionContractImplementor session) {
final ExecutionContext executionContext = new BaseExecutionContext( session );

final DirectResultSetAccess directResultSetAccess;
try {
directResultSetAccess = new DirectResultSetAccess(
final DirectResultSetAccess directResultSetAccess = new DirectResultSetAccess(
session,
(PreparedStatement) resultSet.getStatement(),
statement,
resultSet
);
}
catch (SQLException e) {
throw new HibernateException( "Could not retrieve statement from generated values result set", e );
}

final JdbcValues jdbcValues = new JdbcValuesResultSetImpl(
directResultSetAccess,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ protected void bindParameters(Object entity, PreparedStatement ps, SharedSession
/**
* Extract the generated key value from the given result set after execution of {@link #getSelectSQL()}.
*/
private GeneratedValues extractReturningValues(ResultSet resultSet, SharedSessionContractImplementor session)
private GeneratedValues extractReturningValues(ResultSet resultSet, PreparedStatement statement, SharedSessionContractImplementor session)
throws SQLException {
return getGeneratedValues( resultSet, persister, getTiming(), session );
return getGeneratedValues( resultSet, statement, persister, getTiming(), session );
}

@Override
Expand Down Expand Up @@ -98,7 +98,7 @@ public GeneratedValues performMutation(

final ResultSet resultSet = session.getJdbcCoordinator().getResultSetReturn().extract( idSelect, idSelectSql );
try {
return extractReturningValues( resultSet, session );
return extractReturningValues( resultSet, idSelect, session );
}
catch (SQLException e) {
throw jdbcServices.getSqlExceptionHelper().convert(
Expand Down Expand Up @@ -154,7 +154,7 @@ public final GeneratedValues performInsertReturning(String sql, SharedSessionCon
bindParameters( binder.getEntity(), idSelect, session );
ResultSet resultSet = jdbcCoordinator.getResultSetReturn().extract( idSelect, selectSQL );
try {
return extractReturningValues( resultSet, session );
return extractReturningValues( resultSet, idSelect, session );
}
finally {
jdbcCoordinator.getLogicalConnection().getResourceRegistry().release( resultSet, idSelect );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public GeneratedValues performMutation(
try {
final ResultSet resultSet = preparedStatement.getGeneratedKeys();
try {
return getGeneratedValues( resultSet, persister, getTiming(), session );
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
}
catch (SQLException e) {
throw jdbcServices.getSqlExceptionHelper().convert(
Expand Down Expand Up @@ -158,7 +158,7 @@ public GeneratedValues executeAndExtractReturning(
try {
final ResultSet resultSet = preparedStatement.getGeneratedKeys();
try {
return getGeneratedValues( resultSet, persister, getTiming(), session );
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
}
catch (SQLException e) {
throw jdbcServices.getSqlExceptionHelper().convert(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ protected GeneratedValues executeAndExtractReturning(

final ResultSet resultSet = jdbcCoordinator.getResultSetReturn().execute( preparedStatement, sql );
try {
return getGeneratedValues( resultSet, persister, getTiming(), session );
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
}
catch (SQLException e) {
throw jdbcServices.getSqlExceptionHelper().convert(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public GeneratedValues executeAndExtractReturning(

ResultSet resultSet = jdbcCoordinator.getResultSetReturn().execute( preparedStatement, sql );
try {
return getGeneratedValues( resultSet, persister, getTiming(), session );
return getGeneratedValues( resultSet, preparedStatement, persister, getTiming(), session );
}
catch (SQLException e) {
throw jdbcServices.getSqlExceptionHelper().convert(
Expand Down
Loading