Skip to content

Commit 815c12b

Browse files
committed
[#2495] Adapt to changes to AbstractEntityPersister in 7.2
1 parent ee34a2c commit 815c12b

File tree

10 files changed

+202
-32
lines changed

10 files changed

+202
-32
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ enableCentralSonatypeSnapshotsRep = true
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.+
42+
hibernateOrmVersion = 7.2.+
4343

4444
# Override default Hibernate ORM Gradle plugin version
4545
#hibernateOrmGradlePluginVersion = 7.1.0.Final

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public CompletionStage<Void> reactiveExecute() throws HibernateException {
9494
.thenAccept( v -> {
9595
handleDeleted( entry );
9696
updateCacheItem( persister, ck, entry );
97-
handleNaturalIdResolutions( persister, session, id );
97+
handleNaturalIdSharedResolutions( id, persister, session.getPersistenceContext() );
9898
postUpdate();
9999

100100
final StatisticsImplementor statistics = session.getFactory().getStatistics();

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

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,38 @@
1010
import org.hibernate.dialect.Dialect;
1111
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1212
import org.hibernate.generator.EventType;
13+
import org.hibernate.generator.Generator;
14+
import org.hibernate.generator.GeneratorCreationContext;
1315
import org.hibernate.generator.values.GeneratedValueBasicResultBuilder;
1416
import org.hibernate.generator.values.GeneratedValues;
1517
import org.hibernate.generator.values.GeneratedValuesMutationDelegate;
1618
import org.hibernate.generator.values.internal.GeneratedValuesHelper;
1719
import org.hibernate.generator.values.internal.GeneratedValuesImpl;
1820
import org.hibernate.generator.values.internal.GeneratedValuesMappingProducer;
19-
import org.hibernate.id.IdentifierGeneratorHelper;
21+
import org.hibernate.id.CompositeNestedGeneratedValueGenerator;
22+
import org.hibernate.id.Configurable;
23+
import org.hibernate.id.IdentifierGenerator;
24+
import org.hibernate.id.SelectGenerator;
25+
import org.hibernate.id.enhanced.DatabaseStructure;
26+
import org.hibernate.id.enhanced.SequenceStructure;
27+
import org.hibernate.id.enhanced.SequenceStyleGenerator;
28+
import org.hibernate.id.enhanced.TableGenerator;
29+
import org.hibernate.id.enhanced.TableStructure;
2030
import org.hibernate.id.insert.GetGeneratedKeysDelegate;
2131
import org.hibernate.id.insert.UniqueKeySelectingDelegate;
22-
import org.hibernate.internal.CoreLogging;
23-
import org.hibernate.internal.CoreMessageLogger;
2432
import org.hibernate.metamodel.mapping.ModelPart;
33+
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
2534
import org.hibernate.persister.entity.EntityPersister;
2635
import org.hibernate.pretty.MessageHelper;
2736
import org.hibernate.query.spi.QueryOptions;
37+
import org.hibernate.reactive.id.ReactiveIdentifierGenerator;
38+
import org.hibernate.reactive.id.impl.EmulatedSequenceReactiveIdentifierGenerator;
39+
import org.hibernate.reactive.id.impl.ReactiveCompositeNestedGeneratedValueGenerator;
40+
import org.hibernate.reactive.id.impl.ReactiveGeneratorWrapper;
41+
import org.hibernate.reactive.id.impl.ReactiveSequenceIdentifierGenerator;
42+
import org.hibernate.reactive.id.impl.TableReactiveIdentifierGenerator;
2843
import org.hibernate.reactive.id.insert.ReactiveInsertReturningDelegate;
44+
import org.hibernate.reactive.logging.impl.Log;
2945
import org.hibernate.reactive.sql.exec.spi.ReactiveRowProcessingState;
3046
import org.hibernate.reactive.sql.exec.spi.ReactiveValuesResultSet;
3147
import org.hibernate.reactive.sql.results.internal.ReactiveDirectResultSetAccess;
@@ -48,16 +64,18 @@
4864
import java.util.List;
4965
import java.util.concurrent.CompletionStage;
5066

67+
import static java.lang.invoke.MethodHandles.lookup;
5168
import static org.hibernate.generator.values.internal.GeneratedValuesHelper.noCustomSql;
5269
import static org.hibernate.internal.NaturalIdHelper.getNaturalIdPropertyNames;
70+
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
5371
import static org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer.UniqueSemantic.NONE;
5472

5573
/**
5674
* @see org.hibernate.generator.values.internal.GeneratedValuesHelper
5775
*/
5876
@Internal
5977
public class ReactiveGeneratedValuesHelper {
60-
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( IdentifierGeneratorHelper.class );
78+
private static final Log LOG = make( Log.class, lookup() );
6179

6280
/**
6381
*
@@ -225,4 +243,53 @@ public boolean shouldReturnProxies() {
225243
return results.get( 0 );
226244
} );
227245
}
246+
247+
public static Generator augmentWithReactiveGenerator(
248+
Generator generator,
249+
GeneratorCreationContext creationContext,
250+
RuntimeModelCreationContext runtimeModelCreationContext) {
251+
if ( generator instanceof SequenceStyleGenerator sequenceStyleGenerator) {
252+
final DatabaseStructure structure = sequenceStyleGenerator.getDatabaseStructure();
253+
if ( structure instanceof TableStructure ) {
254+
return initialize( (IdentifierGenerator) generator, new EmulatedSequenceReactiveIdentifierGenerator( (TableStructure) structure, runtimeModelCreationContext ), creationContext );
255+
}
256+
if ( structure instanceof SequenceStructure ) {
257+
return initialize( (IdentifierGenerator) generator, new ReactiveSequenceIdentifierGenerator( structure, runtimeModelCreationContext ), creationContext );
258+
}
259+
throw LOG.unknownStructureType();
260+
}
261+
if ( generator instanceof TableGenerator tableGenerator ) {
262+
return initialize(
263+
(IdentifierGenerator) generator,
264+
new TableReactiveIdentifierGenerator( tableGenerator, runtimeModelCreationContext ),
265+
creationContext
266+
);
267+
}
268+
if ( generator instanceof SelectGenerator ) {
269+
throw LOG.selectGeneratorIsNotSupportedInHibernateReactive();
270+
}
271+
if ( generator instanceof CompositeNestedGeneratedValueGenerator compositeNestedGeneratedValueGenerator ) {
272+
final ReactiveCompositeNestedGeneratedValueGenerator reactiveCompositeNestedGeneratedValueGenerator = new ReactiveCompositeNestedGeneratedValueGenerator(
273+
compositeNestedGeneratedValueGenerator,
274+
creationContext,
275+
runtimeModelCreationContext
276+
);
277+
return initialize(
278+
(IdentifierGenerator) generator,
279+
reactiveCompositeNestedGeneratedValueGenerator,
280+
creationContext
281+
);
282+
}
283+
//nothing to do
284+
return generator;
285+
}
286+
287+
private static Generator initialize(
288+
IdentifierGenerator idGenerator,
289+
ReactiveIdentifierGenerator<?> reactiveIdGenerator,
290+
GeneratorCreationContext creationContext) {
291+
( (Configurable) reactiveIdGenerator ).initialize( creationContext.getSqlStringGenerationContext() );
292+
return new ReactiveGeneratorWrapper( reactiveIdGenerator, idGenerator );
293+
}
294+
228295
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/ReactiveCompositeNestedGeneratedValueGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import org.hibernate.id.IdentifierGenerationException;
1414
import org.hibernate.mapping.Component;
1515
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
16+
import org.hibernate.reactive.generator.values.internal.ReactiveGeneratedValuesHelper;
1617
import org.hibernate.reactive.id.ReactiveIdentifierGenerator;
1718
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
18-
import org.hibernate.reactive.tuple.entity.ReactiveEntityMetamodel;
1919

2020
import java.util.ArrayList;
2121
import java.util.List;
@@ -46,7 +46,7 @@ private static List<GenerationPlan> reactivePlans(
4646
final List<GenerationPlan> plans = new ArrayList<>();
4747
for ( GenerationPlan plan : generator.getGenerationPlans() ) {
4848
final GenerationPlan reactivePlane = new Component.ValueGenerationPlan(
49-
(BeforeExecutionGenerator) ReactiveEntityMetamodel.augmentWithReactiveGenerator(
49+
(BeforeExecutionGenerator) ReactiveGeneratedValuesHelper.augmentWithReactiveGenerator(
5050
plan.getGenerator(),
5151
creationContext,
5252
runtimeModelCreationContext

hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveRuntimeModelCreationContext.java

Lines changed: 97 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
*/
66
package org.hibernate.reactive.metamodel.mapping.internal;
77

8-
import java.util.Map;
9-
8+
import org.hibernate.boot.model.relational.Database;
109
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
1110
import org.hibernate.boot.spi.BootstrapContext;
1211
import org.hibernate.boot.spi.MetadataImplementor;
@@ -16,31 +15,37 @@
1615
import org.hibernate.engine.jdbc.spi.JdbcServices;
1716
import org.hibernate.engine.spi.SessionFactoryImplementor;
1817
import org.hibernate.generator.Generator;
18+
import org.hibernate.generator.GeneratorCreationContext;
1919
import org.hibernate.mapping.GeneratorSettings;
2020
import org.hibernate.mapping.PersistentClass;
21+
import org.hibernate.mapping.Property;
22+
import org.hibernate.mapping.RootClass;
23+
import org.hibernate.mapping.SimpleValue;
2124
import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
2225
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
23-
import org.hibernate.persister.entity.EntityPersister;
2426
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
25-
import org.hibernate.reactive.tuple.entity.ReactiveEntityMetamodel;
27+
import org.hibernate.reactive.logging.impl.Log;
2628
import org.hibernate.service.ServiceRegistry;
27-
import org.hibernate.tuple.entity.EntityMetamodel;
29+
import org.hibernate.type.Type;
2830
import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry;
2931
import org.hibernate.type.spi.TypeConfiguration;
3032

33+
import java.util.Map;
34+
35+
import static java.lang.invoke.MethodHandles.lookup;
36+
import static org.hibernate.reactive.generator.values.internal.ReactiveGeneratedValuesHelper.augmentWithReactiveGenerator;
37+
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
38+
3139
public class ReactiveRuntimeModelCreationContext implements RuntimeModelCreationContext {
3240

41+
private static final Log LOG = make( Log.class, lookup() );
42+
3343
private final RuntimeModelCreationContext delegate;
3444

3545
public ReactiveRuntimeModelCreationContext(RuntimeModelCreationContext delegate) {
3646
this.delegate = delegate;
3747
}
3848

39-
@Override
40-
public EntityMetamodel createEntityMetamodel(PersistentClass persistentClass, EntityPersister persister) {
41-
return new ReactiveEntityMetamodel( persistentClass, persister, delegate );
42-
}
43-
4449
@Override
4550
public SessionFactoryImplementor getSessionFactory() {
4651
return delegate.getSessionFactory();
@@ -125,4 +130,86 @@ public Map<String, Generator> getGenerators() {
125130
public GeneratorSettings getGeneratorSettings() {
126131
return delegate.getGeneratorSettings();
127132
}
133+
134+
@Override
135+
public Generator getOrCreateIdGenerator(String rootName, PersistentClass persistentClass){
136+
final Generator existing = getGenerators().get( rootName );
137+
if ( existing != null ) {
138+
return existing;
139+
}
140+
else {
141+
final SimpleValue identifier = (SimpleValue) persistentClass.getIdentifier();
142+
final Generator idgenerator = augmentWithReactiveGenerator(
143+
identifier.createGenerator(
144+
getDialect(),
145+
persistentClass.getRootClass(),
146+
persistentClass.getIdentifierProperty(),
147+
getGeneratorSettings()
148+
),
149+
new IdGeneratorCreationContext(
150+
persistentClass.getRootClass(),
151+
persistentClass.getIdentifierProperty(),
152+
getGeneratorSettings(),
153+
identifier,
154+
this
155+
),
156+
this );
157+
getGenerators().put( rootName, idgenerator );
158+
return idgenerator;
159+
}
160+
}
161+
162+
private record IdGeneratorCreationContext(
163+
RootClass rootClass,
164+
Property property,
165+
GeneratorSettings defaults,
166+
SimpleValue identifier,
167+
RuntimeModelCreationContext buildingContext) implements GeneratorCreationContext {
168+
169+
@Override
170+
public Database getDatabase() {
171+
return buildingContext.getBootModel().getDatabase();
172+
}
173+
174+
@Override
175+
public ServiceRegistry getServiceRegistry() {
176+
return buildingContext.getBootstrapContext().getServiceRegistry();
177+
}
178+
179+
@Override
180+
public SqlStringGenerationContext getSqlStringGenerationContext() {
181+
return defaults.getSqlStringGenerationContext();
182+
}
183+
184+
@Override
185+
public String getDefaultCatalog() {
186+
return defaults.getDefaultCatalog();
187+
}
188+
189+
@Override
190+
public String getDefaultSchema() {
191+
return defaults.getDefaultSchema();
192+
}
193+
194+
@Override
195+
public RootClass getRootClass() {
196+
return rootClass;
197+
}
198+
199+
@Override
200+
public PersistentClass getPersistentClass() {
201+
return rootClass;
202+
}
203+
204+
@Override
205+
public Property getProperty() {
206+
return property;
207+
}
208+
209+
@Override
210+
public Type getType() {
211+
return identifier.getType();
212+
}
213+
}
214+
128215
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcConnectionProviderInitiator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import org.hibernate.boot.registry.StandardServiceInitiator;
99
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
10-
import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl;
10+
import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProvider;
1111
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
1212
import org.hibernate.service.spi.ServiceRegistryImplementor;
1313

@@ -28,7 +28,7 @@ public class NoJdbcConnectionProviderInitiator implements StandardServiceInitiat
2828
@Override
2929
public ConnectionProvider initiateService(Map configurationValues, ServiceRegistryImplementor registry) {
3030
ConnectionProvider provider = ConnectionProviderInitiator.INSTANCE.initiateService(configurationValues, registry);
31-
if (provider instanceof DriverManagerConnectionProviderImpl) {
31+
if ( provider instanceof DriverManagerConnectionProvider ) {
3232
return NoJdbcConnectionProvider.INSTANCE;
3333
}
3434
return provider;

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ private void threadCheck() {
195195
}
196196

197197
@Override
198-
protected PersistenceContext createPersistenceContext() {
199-
return new ReactivePersistenceContextAdapter( super.createPersistenceContext() );
198+
protected PersistenceContext createPersistenceContext(SessionCreationOptions options) {
199+
return new ReactivePersistenceContextAdapter( super.createPersistenceContext( options ) );
200200
}
201201

202202
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/spi/ReactiveListResultsConsumer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ private JavaType<R> resolveDomainResultJavaType(
271271
return (JavaType<R>) resultJavaTypes.get( 0 );
272272
}
273273

274-
return javaTypeRegistry.resolveDescriptor( Object[].class );
274+
return javaTypeRegistry.getDescriptor( Object[].class );
275275
}
276276

277277
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/tuple/entity/ReactiveEntityMetamodel.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.hibernate.mapping.RootClass;
2828
import org.hibernate.mapping.SimpleValue;
2929
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
30-
import org.hibernate.persister.entity.EntityPersister;
3130
import org.hibernate.reactive.id.ReactiveIdentifierGenerator;
3231
import org.hibernate.reactive.id.impl.EmulatedSequenceReactiveIdentifierGenerator;
3332
import org.hibernate.reactive.id.impl.ReactiveCompositeNestedGeneratedValueGenerator;
@@ -42,28 +41,29 @@
4241
import static java.lang.invoke.MethodHandles.lookup;
4342
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
4443

44+
/**
45+
* @deprecated No Longer used
46+
*/
47+
@Deprecated(since = "4.2", forRemoval = true)
4548
public class ReactiveEntityMetamodel extends EntityMetamodel {
4649

4750
private static final Log LOG = make( Log.class, lookup() );
4851

4952
public ReactiveEntityMetamodel(
5053
PersistentClass persistentClass,
51-
EntityPersister persister,
5254
RuntimeModelCreationContext creationContext) {
5355
this(
5456
persistentClass,
55-
persister,
5657
creationContext,
5758
s -> buildIdGenerator( s, persistentClass, creationContext )
5859
);
5960
}
6061

6162
public ReactiveEntityMetamodel(
6263
PersistentClass persistentClass,
63-
EntityPersister persister,
6464
RuntimeModelCreationContext creationContext,
6565
Function<String, Generator> generatorSupplier) {
66-
super( persistentClass, persister, creationContext, generatorSupplier );
66+
super( persistentClass, creationContext, generatorSupplier );
6767
}
6868

6969
private static Generator buildIdGenerator(

0 commit comments

Comments
 (0)