Skip to content

Commit 2b3d59c

Browse files
authored
Merge branch 'main' into dependabot/gradle/main/mutiny-ab532cbfc2
2 parents ed49896 + 82340d1 commit 2b3d59c

File tree

42 files changed

+1997
-284
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1997
-284
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ jobs:
193193
# and it's useful to test that.
194194
- { name: "20", java_version_numeric: 20, jvm_args: '--enable-preview' }
195195
- { name: "21", java_version_numeric: 21, jvm_args: '--enable-preview' }
196-
- { name: "24", java_version_numeric: 24, from: 'jdk.java.net', jvm_args: '--enable-preview' }
197-
- { name: "25-ea", java_version_numeric: 25, from: 'jdk.java.net', jvm_args: '--enable-preview' }
196+
- { name: "24", java_version_numeric: 24, jvm_args: '--enable-preview' }
197+
- { name: "25", java_version_numeric: 25, from: 'jdk.java.net', jvm_args: '--enable-preview' }
198198
- { name: "26-ea", java_version_numeric: 26, from: 'jdk.java.net', jvm_args: '--enable-preview' }
199199
steps:
200200
- name: Checkout ${{ inputs.branch }}

documentation/src/main/asciidoc/reference/introduction.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ Optionally, you might also add any of the following additional features:
8989
| Hibernate Validator | `org.hibernate.validator:hibernate-validator` and `org.glassfish:jakarta.el`
9090
| Compile-time checking for your HQL queries | `org.hibernate:query-validator`
9191
| Second-level cache support via JCache and EHCache | `org.hibernate.orm:hibernate-jcache` along with `org.ehcache:ehcache`
92-
| SCRAM authentication support for PostgreSQL | `com.ongres.scram:scram-client:3.1`
92+
| SCRAM authentication support for PostgreSQL | `com.ongres.scram:scram-client:3.2`
9393
|===
9494

9595
You might also add the Hibernate {enhancer}[bytecode enhancer] to your

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ org.gradle.java.installations.auto-download=false
3939
### Settings the following properties will override the version defined in gradle/libs.versions.toml
4040

4141
# The default Hibernate ORM version (override using `-PhibernateOrmVersion=the.version.you.want`)
42-
#hibernateOrmVersion = 7.1.0.Final
42+
#hibernateOrmVersion = 7.1.1.Final
4343

4444
# Override default Hibernate ORM Gradle plugin version
45-
#hibernateOrmGradlePluginVersion = 7.1.0.Final
45+
#hibernateOrmGradlePluginVersion = 7.1.1.Final
4646

4747
# If set to true, skip Hibernate ORM version parsing (default is true, if set to null)
4848
# this is required when using intervals or weird versions or the build will fail

gradle/libs.versions.toml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
[versions]
2-
assertjVersion = "3.27.4"
3-
hibernateOrmVersion = "7.1.0.Final"
4-
hibernateOrmGradlePluginVersion = "7.1.0.Final"
2+
assertjVersion = "3.27.6"
3+
hibernateOrmVersion = "7.1.1.Final"
4+
hibernateOrmGradlePluginVersion = "7.1.1.Final"
55
jacksonDatabindVersion = "2.20.0"
66
jbossLoggingAnnotationVersion = "3.0.4.Final"
77
jbossLoggingVersion = "3.6.1.Final"
88
junitVersion = "5.13.4"
99
junitPlatformVersion = "1.13.3"
10-
log4jVersion = "2.25.1"
10+
log4jVersion = "2.25.2"
1111
testcontainersVersion = "1.21.3"
12-
vertxSqlClientVersion = "5.0.3"
13-
vertxWebVersion= "5.0.3"
14-
vertxWebClientVersion = "5.0.3"
12+
vertxSqlClientVersion = "5.0.4"
13+
vertxWebVersion= "5.0.4"
14+
vertxWebClientVersion = "5.0.4"
1515

1616
[libraries]
1717
com-fasterxml-jackson-core-jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jacksonDatabindVersion" }
1818
com-ibm-db2-jcc = { group = "com.ibm.db2", name = "jcc", version = "12.1.2.0" }
1919
com-microsoft-sqlserver-mssql-jdbc = { group = "com.microsoft.sqlserver", name = "mssql-jdbc", version = "13.2.0.jre11" }
2020
com-mysql-mysql-connector-j = { group = "com.mysql", name = "mysql-connector-j", version = "9.4.0" }
21-
com-ongres-scram-scram-client = { group = "com.ongres.scram", name = "scram-client", version = "3.1" }
21+
com-ongres-scram-scram-client = { group = "com.ongres.scram", name = "scram-client", version = "3.2" }
2222
io-smallrye-reactive-mutiny = { group = "io.smallrye.reactive", name = "mutiny", version = "3.0.0" }
2323
io-vertx-vertx-db2-client = { group = "io.vertx", name = "vertx-db2-client", version.ref = "vertxSqlClientVersion" }
2424
io-vertx-vertx-junit5 = { group = "io.vertx", name = "vertx-junit5", version.ref = "vertxSqlClientVersion" }
@@ -44,8 +44,8 @@ org-jboss-logging-jboss-logging-processor = { group = "org.jboss.logging", name
4444
org-junit-jupiter-junit-jupiter-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junitVersion" }
4545
org-junit-jupiter-junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junitVersion" }
4646
org-junit-platform-junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version = "1.13.4" }
47-
org-mariadb-jdbc-mariadb-java-client = { group = "org.mariadb.jdbc", name = "mariadb-java-client", version = "3.5.5" }
48-
org-postgresql-postgresql = { group = "org.postgresql", name = "postgresql", version = "42.7.7" }
47+
org-mariadb-jdbc-mariadb-java-client = { group = "org.mariadb.jdbc", name = "mariadb-java-client", version = "3.5.6" }
48+
org-postgresql-postgresql = { group = "org.postgresql", name = "postgresql", version = "42.7.8" }
4949
org-testcontainers-cockroachdb = { group = "org.testcontainers", name = "cockroachdb", version.ref = "testcontainersVersion" }
5050
org-testcontainers-db2 = { group = "org.testcontainers", name = "db2", version.ref = "testcontainersVersion" }
5151
org-testcontainers-mariadb = { group = "org.testcontainers", name = "mariadb", version.ref = "testcontainersVersion" }

hibernate-reactive-core/src/main/java/org/hibernate/reactive/adaptor/impl/ResultSetAdaptor.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.time.LocalDate;
2929
import java.time.LocalDateTime;
3030
import java.time.LocalTime;
31+
import java.util.ArrayList;
3132
import java.util.Calendar;
3233
import java.util.Collection;
3334
import java.util.Iterator;
@@ -134,20 +135,27 @@ public ResultSetAdaptor(RowSet<Row> rows) {
134135
this.columnDescriptors = rows.columnDescriptors();
135136
}
136137

137-
public ResultSetAdaptor(RowSet<Row> rows, PropertyKind<Row> propertyKind, String idColumnName, Class<?> idClass) {
138-
this( rows, rows.property( propertyKind ), idColumnName, idClass );
138+
public ResultSetAdaptor(RowSet<Row> rows, PropertyKind<Row> propertyKind, List<String> generatedColumnNames, List<Class<?>> generatedColumnClasses) {
139+
this( rows, rows.property( propertyKind ), generatedColumnNames, generatedColumnClasses );
139140
}
140141

141142
public ResultSetAdaptor(RowSet<Row> rows, Collection<?> ids, String idColumnName, Class<?> idClass) {
142143
this( rows, new RowFromId( ids, idColumnName ), idColumnName, idClass );
143144
}
144145

145146
private ResultSetAdaptor(RowSet<Row> rows, Row row, String idColumnName, Class<?> idClass) {
147+
this( rows, row, List.of( idColumnName ), List.of( idClass ) );
148+
}
149+
150+
private ResultSetAdaptor(RowSet<Row> rows, Row row, List<String> columnNames, List<Class<?>> columnClasses) {
146151
requireNonNull( rows );
147-
requireNonNull( idColumnName );
152+
requireNonNull( columnNames );
148153
this.iterator = List.of( row ).iterator();
149-
this.columnNames = List.of( idColumnName );
150-
this.columnDescriptors = List.of( toColumnDescriptor( idClass, idColumnName ) );
154+
this.columnNames = columnNames ;
155+
this.columnDescriptors = new ArrayList<>(columnNames.size());
156+
for (int i =0; i < columnNames.size(); i++) {
157+
columnDescriptors.add( toColumnDescriptor( columnClasses.get( i ), columnNames.get(i) ) );
158+
}
151159
}
152160

153161
private static ColumnDescriptor toColumnDescriptor(Class<?> idClass, String idColumnName) {

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ForeignKeys.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.hibernate.TransientObjectException;
1212
import org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer;
1313
import org.hibernate.engine.internal.NonNullableTransientDependencies;
14-
import org.hibernate.engine.internal.ReactivePersistenceContextAdapter;
1514
import org.hibernate.engine.spi.EntityEntry;
1615
import org.hibernate.engine.spi.PersistenceContext;
1716
import org.hibernate.engine.spi.SelfDirtinessTracker;

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityIdentityInsertAction.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.hibernate.event.spi.EventSource;
1717
import org.hibernate.generator.values.GeneratedValues;
1818
import org.hibernate.internal.util.NullnessUtil;
19+
import org.hibernate.metamodel.mapping.EntityRowIdMapping;
1920
import org.hibernate.persister.entity.EntityPersister;
2021
import org.hibernate.reactive.persister.entity.impl.ReactiveEntityPersister;
2122
import org.hibernate.stat.spi.StatisticsImplementor;
@@ -31,6 +32,7 @@ public class ReactiveEntityIdentityInsertAction extends EntityIdentityInsertActi
3132
private final boolean isVersionIncrementDisabled;
3233
private boolean executed;
3334
private boolean transientReferencesNullified;
35+
private Object rowId;
3436

3537
public ReactiveEntityIdentityInsertAction(
3638
Object[] state,
@@ -108,6 +110,13 @@ private CompletionStage<Void> processInsertGeneratedProperties(
108110
Object instance,
109111
GeneratedValues generatedValues,
110112
SharedSessionContractImplementor session) {
113+
final EntityRowIdMapping rowIdMapping = persister.getRowIdMapping();
114+
if ( rowIdMapping != null ) {
115+
rowId = generatedValues.getGeneratedValue( rowIdMapping );
116+
if ( rowId != null && !isEarlyInsert() ) {
117+
session.getPersistenceContext().replaceEntityEntryRowId( getInstance(), rowId );
118+
}
119+
}
111120
return persister.hasInsertGeneratedProperties()
112121
? persister.reactiveProcessInsertGenerated( generatedId, instance, getState(), generatedValues, session )
113122
: voidFuture();
@@ -153,4 +162,9 @@ public boolean areTransientReferencesNullified() {
153162
public void setTransientReferencesNullified() {
154163
transientReferencesNullified = true;
155164
}
165+
166+
@Override
167+
public Object getRowId() {
168+
return rowId;
169+
}
156170
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityRegularInsertAction.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1818
import org.hibernate.event.spi.EventSource;
1919
import org.hibernate.generator.values.GeneratedValues;
20+
import org.hibernate.metamodel.mapping.EntityRowIdMapping;
2021
import org.hibernate.persister.entity.EntityPersister;
2122
import org.hibernate.reactive.persister.entity.impl.ReactiveEntityPersister;
2223
import org.hibernate.stat.spi.StatisticsImplementor;
@@ -111,8 +112,19 @@ private CompletionStage<Void> processInsertGeneratedProperties(
111112
// setVersion( Versioning.getVersion( getState(), persister ) );
112113
}
113114
return persister.reactiveProcessInsertGenerated( id, instance, getState(), generatedValues, session )
114-
.thenAccept( v -> entry.postUpdate( instance, getState(), getVersion() ) );
115-
115+
.thenAccept( v -> {
116+
// Process row-id values when available early by replacing the entity entry
117+
if ( generatedValues != null ) {
118+
final EntityRowIdMapping rowIdMapping = persister.getRowIdMapping();
119+
if ( rowIdMapping != null ) {
120+
final Object rowId = generatedValues.getGeneratedValue( rowIdMapping );
121+
if ( rowId != null ) {
122+
session.getPersistenceContext().replaceEntityEntryRowId( getInstance(), rowId );
123+
}
124+
}
125+
}
126+
entry.postUpdate( instance, getState(), getVersion() );
127+
} );
116128
}
117129
else {
118130
return voidFuture();

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityUpdateAction.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.hibernate.engine.spi.Status;
1616
import org.hibernate.event.spi.EventSource;
1717
import org.hibernate.generator.values.GeneratedValues;
18+
import org.hibernate.metamodel.mapping.EntityRowIdMapping;
1819
import org.hibernate.persister.entity.EntityPersister;
1920
import org.hibernate.reactive.engine.ReactiveExecutable;
2021
import org.hibernate.reactive.persister.entity.impl.ReactiveEntityPersister;
@@ -143,7 +144,19 @@ private CompletionStage<Void> processGeneratedProperties(
143144
throw new UnsupportedOperationException( "generated version attribute not supported in Hibernate Reactive" );
144145
// setNextVersion( Versioning.getVersion( getState(), persister ) );
145146
}
146-
return persister.reactiveProcessUpdateGenerated( id, instance, getState(), generatedValues, session );
147+
return persister.reactiveProcessUpdateGenerated( id, instance, getState(), generatedValues, session )
148+
.thenAccept( v -> {
149+
// Process row-id values when available early by replacing the entity entry
150+
if ( generatedValues != null ) {
151+
final EntityRowIdMapping rowIdMapping = persister.getRowIdMapping();
152+
if ( rowIdMapping != null ) {
153+
final Object rowId = generatedValues.getGeneratedValue( rowIdMapping );
154+
if ( rowId != null ) {
155+
session.getPersistenceContext().replaceEntityEntryRowId( getInstance(), rowId );
156+
}
157+
}
158+
}
159+
} );
147160

148161
}
149162
else {
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
* Copyright: Red Hat Inc. and Hibernate Authors
55
*/
6-
package org.hibernate.engine.internal;
6+
package org.hibernate.reactive.engine.impl;
77

88
import java.io.Serializable;
99
import java.util.Iterator;
@@ -36,7 +36,6 @@
3636
import org.hibernate.event.spi.PostLoadEventListener;
3737
import org.hibernate.persister.collection.CollectionPersister;
3838
import org.hibernate.persister.entity.EntityPersister;
39-
import org.hibernate.reactive.engine.impl.ReactiveCallbackImpl;
4039
import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor;
4140
import org.hibernate.reactive.logging.impl.Log;
4241
import org.hibernate.reactive.persister.entity.impl.ReactiveEntityPersister;
@@ -106,7 +105,7 @@ public Object[] getDatabaseSnapshot(Object id, EntityPersister persister) throws
106105
throw LOG.nonReactiveMethodCall( "reactiveGetDatabaseSnapshot" );
107106
}
108107

109-
private static final Object[] NO_ROW = new Object[] {StatefulPersistenceContext.NO_ROW};
108+
private static final Object[] NO_ROW = new Object[] {PersistenceContext.NO_ROW};
110109

111110
public CompletionStage<Object[]> reactiveGetDatabaseSnapshot(Object id, EntityPersister persister) throws HibernateException {
112111
SessionImplementor session = (SessionImplementor) getSession();
@@ -720,7 +719,7 @@ public NaturalIdResolutions getNaturalIdResolutions() {
720719
}
721720

722721
/**
723-
* Reactive version of {@link StatefulPersistenceContext#postLoad(JdbcValuesSourceProcessingState, Consumer)}
722+
* Reactive version of {@link org.hibernate.engine.internal.StatefulPersistenceContext#postLoad(JdbcValuesSourceProcessingState, Consumer)}
724723
*/
725724
public CompletionStage<Void> reactivePostLoad(
726725
JdbcValuesSourceProcessingState processingState,
@@ -763,7 +762,7 @@ private CompletionStage<Void> processHolders(
763762
}
764763

765764
/**
766-
* Reactive version of {@link StatefulPersistenceContext#processLoadedEntityHolder(EntityHolder, EventListenerGroup, PostLoadEvent, Callback, Consumer)}
765+
* Reactive version of {@link org.hibernate.engine.internal.StatefulPersistenceContext#processLoadedEntityHolder(EntityHolder, EventListenerGroup, PostLoadEvent, Callback, Consumer)}
767766
*/
768767
private CompletionStage<Void> processLoadedEntityHolder(
769768
EntityHolder holder,

0 commit comments

Comments
 (0)