Skip to content

Upgrade Hibernate ORM to 7.1.0.CR2 #2403

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 1 commit into from
Aug 6, 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
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[versions]
assertjVersion = "3.27.3"
hibernateOrmVersion = "7.1.0.CR1"
hibernateOrmVersion = "7.1.0.CR2"
hibernateOrmGradlePluginVersion = "7.0.8.Final"
jacksonDatabindVersion = "2.19.2"
jbossLoggingAnnotationVersion = "3.0.4.Final"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@
import static org.hibernate.pretty.MessageHelper.infoString;
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
import static org.hibernate.reactive.util.impl.CompletionStages.completedFuture;
import static org.hibernate.reactive.util.impl.CompletionStages.failedFuture;
import static org.hibernate.reactive.util.impl.CompletionStages.logSqlException;
import static org.hibernate.reactive.util.impl.CompletionStages.nullFuture;
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
Expand Down Expand Up @@ -303,25 +302,25 @@ default CompletionStage<Object> reactiveGetCurrentVersion(Object id, SharedSessi

return getReactiveConnection( session )
.selectJdbc( delegate().getVersionSelectString(), params )
.thenCompose( resultSet -> currentVersion( session, resultSet ) );
.thenApply( resultSet -> currentVersion( session, resultSet ) );
}

private CompletionStage<Object> currentVersion(SharedSessionContractImplementor session, ResultSet resultSet) {
private Object currentVersion(SharedSessionContractImplementor session, ResultSet resultSet) {
try {
if ( !resultSet.next() ) {
return nullFuture();
return null;
}
if ( !isVersioned() ) {
return completedFuture( this );
return this;
}
return completedFuture( getVersionType()
.getJdbcMapping()
.getJdbcValueExtractor()
.extract( resultSet, 1, session ) );
return getVersionType()
.getJdbcMapping()
.getJdbcValueExtractor()
.extract( resultSet, 1, session );
}
catch (SQLException sqle) {
//can never happen
return failedFuture( new JDBCException( "error reading version", sqle ) );
throw new JDBCException( "error reading version", sqle );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import org.hibernate.query.sqm.spi.NamedSqmQueryMemento;
import org.hibernate.query.sqm.tree.SqmStatement;
import org.hibernate.query.sqm.tree.select.SqmSelectStatement;
import org.hibernate.reactive.query.sqm.internal.ReactiveQuerySqmImpl;
import org.hibernate.reactive.query.sqm.internal.ReactiveSqmQueryImpl;
import org.hibernate.reactive.query.sqm.internal.ReactiveSqmSelectionQueryImpl;

/**
Expand Down Expand Up @@ -49,10 +49,10 @@ public SqmQueryImplementor<E> toQuery(SharedSessionContractImplementor session)
public <T> SqmQueryImplementor<T> toQuery(SharedSessionContractImplementor session, Class<T> resultType) {
// A bit of a hack, I'm sure that if we have a better look at this we can avoid the instanceof
if ( delegate instanceof NamedHqlQueryMementoImpl ) {
return new ReactiveQuerySqmImpl<>( (NamedHqlQueryMementoImpl) delegate, resultType, session );
return new ReactiveSqmQueryImpl<>( (NamedHqlQueryMementoImpl) delegate, resultType, session );
}
if ( delegate instanceof NamedCriteriaQueryMementoImpl ) {
return new ReactiveQuerySqmImpl<>( (NamedCriteriaQueryMementoImpl) delegate, resultType, session );
return new ReactiveSqmQueryImpl<>( (NamedCriteriaQueryMementoImpl) delegate, resultType, session );
}
else {
throw new UnsupportedOperationException( "NamedSqmQueryMemento not recognized: " + delegate.getClass() );
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/* Hibernate, Relational Persistence for Idiomatic Java
*
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.reactive.query.sqm.internal;

import org.hibernate.action.internal.BulkOperationCleanupAction;
import org.hibernate.query.spi.DomainQueryExecutionContext;
import org.hibernate.query.sqm.internal.AbstractMultiTableMutationQueryPlan;
import org.hibernate.query.sqm.internal.DomainParameterXref;
import org.hibernate.query.sqm.tree.SqmDmlStatement;
import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan;
import org.hibernate.reactive.query.sqm.mutation.internal.ReactiveHandler;

import java.util.concurrent.CompletionStage;

public abstract class ReactiveAbstractMultiTableMutationQueryPlan<S extends SqmDmlStatement<?>, F>
extends AbstractMultiTableMutationQueryPlan<S, F> implements ReactiveNonSelectQueryPlan {

public ReactiveAbstractMultiTableMutationQueryPlan(
S statement,
DomainParameterXref domainParameterXref,
F strategy) {
super( statement, domainParameterXref, strategy );
}

@Override
public CompletionStage<Integer> executeReactiveUpdate(DomainQueryExecutionContext context) {
BulkOperationCleanupAction.schedule( context.getSession(), getStatement() );
final Interpretation interpretation = getInterpretation( context );
return ((ReactiveHandler)interpretation.handler()).reactiveExecute( interpretation.jdbcParameterBindings(), context );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,32 @@
*/
package org.hibernate.reactive.query.sqm.internal;

import java.util.concurrent.CompletionStage;

import org.hibernate.action.internal.BulkOperationCleanupAction;
import org.hibernate.query.spi.DomainQueryExecutionContext;
import org.hibernate.query.sqm.internal.DomainParameterXref;
import org.hibernate.query.sqm.mutation.spi.MultiTableHandlerBuildResult;
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategy;
import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement;
import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan;
import org.hibernate.reactive.query.sqm.mutation.spi.ReactiveSqmMultiTableMutationStrategy;

/**
* @see org.hibernate.query.sqm.internal.MultiTableDeleteQueryPlan
*/
public class ReactiveMultiTableDeleteQueryPlan implements ReactiveNonSelectQueryPlan {
private final SqmDeleteStatement<?> sqmDelete;
private final DomainParameterXref domainParameterXref;
private final ReactiveSqmMultiTableMutationStrategy deleteStrategy;
public class ReactiveMultiTableDeleteQueryPlan
extends ReactiveAbstractMultiTableMutationQueryPlan<SqmDeleteStatement<?>, SqmMultiTableMutationStrategy> {

public ReactiveMultiTableDeleteQueryPlan(
SqmDeleteStatement<?> sqmDelete,
DomainParameterXref domainParameterXref,
ReactiveSqmMultiTableMutationStrategy deleteStrategy) {
this.sqmDelete = sqmDelete;
this.domainParameterXref = domainParameterXref;
this.deleteStrategy = deleteStrategy;
super( sqmDelete, domainParameterXref, deleteStrategy );
}

@Override
public CompletionStage<Integer> executeReactiveUpdate(DomainQueryExecutionContext executionContext) {
BulkOperationCleanupAction.schedule( executionContext.getSession(), sqmDelete );
return deleteStrategy.reactiveExecuteDelete( sqmDelete, domainParameterXref, executionContext );
protected MultiTableHandlerBuildResult buildHandler(
SqmDeleteStatement<?> statement,
DomainParameterXref domainParameterXref,
SqmMultiTableMutationStrategy strategy,
DomainQueryExecutionContext context) {
return strategy.buildHandler( statement, domainParameterXref, context );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,32 @@
*/
package org.hibernate.reactive.query.sqm.internal;

import java.util.concurrent.CompletionStage;

import org.hibernate.action.internal.BulkOperationCleanupAction;
import org.hibernate.query.spi.DomainQueryExecutionContext;
import org.hibernate.query.sqm.internal.DomainParameterXref;
import org.hibernate.query.sqm.mutation.spi.MultiTableHandlerBuildResult;
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy;
import org.hibernate.query.sqm.tree.insert.SqmInsertStatement;
import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan;
import org.hibernate.reactive.query.sqm.mutation.spi.ReactiveSqmMultiTableInsertStrategy;

/**
* @see org.hibernate.query.sqm.internal.MultiTableInsertQueryPlan
*/
public class ReactiveMultiTableInsertQueryPlan implements ReactiveNonSelectQueryPlan {
private final SqmInsertStatement<?> sqmInsert;
private final DomainParameterXref domainParameterXref;
private final ReactiveSqmMultiTableInsertStrategy mutationStrategy;
public class ReactiveMultiTableInsertQueryPlan
extends ReactiveAbstractMultiTableMutationQueryPlan<SqmInsertStatement<?>, SqmMultiTableInsertStrategy> {

public ReactiveMultiTableInsertQueryPlan(
SqmInsertStatement<?> sqmInsert,
DomainParameterXref domainParameterXref,
ReactiveSqmMultiTableInsertStrategy mutationStrategy) {
this.sqmInsert = sqmInsert;
this.domainParameterXref = domainParameterXref;
this.mutationStrategy = mutationStrategy;
super( sqmInsert, domainParameterXref, mutationStrategy );
}

@Override
public CompletionStage<Integer> executeReactiveUpdate(DomainQueryExecutionContext executionContext) {
BulkOperationCleanupAction.schedule( executionContext.getSession(), sqmInsert );
return mutationStrategy.reactiveExecuteInsert( sqmInsert, domainParameterXref, executionContext );
protected MultiTableHandlerBuildResult buildHandler(
SqmInsertStatement<?> statement,
DomainParameterXref domainParameterXref,
SqmMultiTableInsertStrategy strategy,
DomainQueryExecutionContext context) {
return strategy.buildHandler( statement, domainParameterXref, context );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,31 @@
*/
package org.hibernate.reactive.query.sqm.internal;

import java.util.concurrent.CompletionStage;

import org.hibernate.action.internal.BulkOperationCleanupAction;
import org.hibernate.query.spi.DomainQueryExecutionContext;
import org.hibernate.query.sqm.internal.DomainParameterXref;
import org.hibernate.query.sqm.mutation.spi.MultiTableHandlerBuildResult;
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategy;
import org.hibernate.query.sqm.tree.update.SqmUpdateStatement;
import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan;
import org.hibernate.reactive.query.sqm.mutation.spi.ReactiveSqmMultiTableMutationStrategy;

/**
* @see org.hibernate.query.sqm.internal.MultiTableUpdateQueryPlan
*/
public class ReactiveMultiTableUpdateQueryPlan implements ReactiveNonSelectQueryPlan {
private final SqmUpdateStatement<?> sqmUpdate;
private final DomainParameterXref domainParameterXref;
private final ReactiveSqmMultiTableMutationStrategy mutationStrategy;
public class ReactiveMultiTableUpdateQueryPlan
extends ReactiveAbstractMultiTableMutationQueryPlan<SqmUpdateStatement<?>, SqmMultiTableMutationStrategy> {

public ReactiveMultiTableUpdateQueryPlan(
SqmUpdateStatement<?> sqmUpdate,
DomainParameterXref domainParameterXref,
ReactiveSqmMultiTableMutationStrategy mutationStrategy) {
this.sqmUpdate = sqmUpdate;
this.domainParameterXref = domainParameterXref;
this.mutationStrategy = mutationStrategy;
SqmMultiTableMutationStrategy mutationStrategy) {
super( sqmUpdate, domainParameterXref, mutationStrategy );
}

@Override
public CompletionStage<Integer> executeReactiveUpdate(DomainQueryExecutionContext executionContext) {
BulkOperationCleanupAction.schedule( executionContext.getSession(), sqmUpdate );
return mutationStrategy.reactiveExecuteUpdate( sqmUpdate, domainParameterXref, executionContext );
protected MultiTableHandlerBuildResult buildHandler(
SqmUpdateStatement<?> statement,
DomainParameterXref domainParameterXref,
SqmMultiTableMutationStrategy strategy,
DomainQueryExecutionContext context) {
return strategy.buildHandler( statement, domainParameterXref, context );
}
}
Loading
Loading