Skip to content

Commit af08d78

Browse files
dreab8DavideD
authored andcommitted
[#2495] Adapt to changes to AbstractEntityPersister in 7.2
1 parent 88c7620 commit af08d78

File tree

9 files changed

+206
-37
lines changed

9 files changed

+206
-37
lines changed

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
@@ -95,7 +95,7 @@ public CompletionStage<Void> reactiveExecute() throws HibernateException {
9595
.thenAccept( v -> {
9696
handleDeleted( entry );
9797
updateCacheItem( persister, ck, entry );
98-
handleNaturalIdResolutions( persister, session, id );
98+
handleNaturalIdSharedResolutions( id, persister, session.getPersistenceContext() );
9999
postUpdate();
100100

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

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

Lines changed: 78 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55
*/
66
package org.hibernate.reactive.generator.values.internal;
77

8+
import java.sql.PreparedStatement;
9+
import java.sql.ResultSet;
10+
import java.sql.SQLException;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.concurrent.CompletionStage;
14+
815
import org.hibernate.HibernateException;
916
import org.hibernate.Internal;
1017
import org.hibernate.dialect.CockroachDialect;
@@ -14,23 +21,39 @@
1421
import org.hibernate.dialect.OracleDialect;
1522
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1623
import org.hibernate.generator.EventType;
24+
import org.hibernate.generator.Generator;
25+
import org.hibernate.generator.GeneratorCreationContext;
1726
import org.hibernate.generator.values.GeneratedValueBasicResultBuilder;
1827
import org.hibernate.generator.values.GeneratedValues;
1928
import org.hibernate.generator.values.GeneratedValuesMutationDelegate;
2029
import org.hibernate.generator.values.internal.GeneratedValuesHelper;
2130
import org.hibernate.generator.values.internal.GeneratedValuesImpl;
2231
import org.hibernate.generator.values.internal.GeneratedValuesMappingProducer;
23-
import org.hibernate.id.IdentifierGeneratorHelper;
24-
import org.hibernate.internal.CoreLogging;
25-
import org.hibernate.internal.CoreMessageLogger;
32+
import org.hibernate.id.CompositeNestedGeneratedValueGenerator;
33+
import org.hibernate.id.Configurable;
34+
import org.hibernate.id.IdentifierGenerator;
35+
import org.hibernate.id.SelectGenerator;
36+
import org.hibernate.id.enhanced.DatabaseStructure;
37+
import org.hibernate.id.enhanced.SequenceStructure;
38+
import org.hibernate.id.enhanced.SequenceStyleGenerator;
39+
import org.hibernate.id.enhanced.TableGenerator;
40+
import org.hibernate.id.enhanced.TableStructure;
2641
import org.hibernate.metamodel.mapping.ModelPart;
2742
import org.hibernate.metamodel.mapping.SelectableMapping;
43+
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
2844
import org.hibernate.persister.entity.EntityPersister;
2945
import org.hibernate.pretty.MessageHelper;
3046
import org.hibernate.query.spi.QueryOptions;
47+
import org.hibernate.reactive.id.ReactiveIdentifierGenerator;
48+
import org.hibernate.reactive.id.impl.EmulatedSequenceReactiveIdentifierGenerator;
49+
import org.hibernate.reactive.id.impl.ReactiveCompositeNestedGeneratedValueGenerator;
50+
import org.hibernate.reactive.id.impl.ReactiveGeneratorWrapper;
51+
import org.hibernate.reactive.id.impl.ReactiveSequenceIdentifierGenerator;
52+
import org.hibernate.reactive.id.impl.TableReactiveIdentifierGenerator;
3153
import org.hibernate.reactive.id.insert.ReactiveGetGeneratedKeysDelegate;
3254
import org.hibernate.reactive.id.insert.ReactiveInsertReturningDelegate;
3355
import org.hibernate.reactive.id.insert.ReactiveUniqueKeySelectingDelegate;
56+
import org.hibernate.reactive.logging.impl.Log;
3457
import org.hibernate.reactive.sql.exec.spi.ReactiveRowProcessingState;
3558
import org.hibernate.reactive.sql.exec.spi.ReactiveValuesResultSet;
3659
import org.hibernate.reactive.sql.results.internal.ReactiveDirectResultSetAccess;
@@ -45,15 +68,10 @@
4568
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducer;
4669
import org.hibernate.type.descriptor.WrapperOptions;
4770

48-
import java.sql.PreparedStatement;
49-
import java.sql.ResultSet;
50-
import java.sql.SQLException;
51-
import java.util.ArrayList;
52-
import java.util.List;
53-
import java.util.concurrent.CompletionStage;
54-
71+
import static java.lang.invoke.MethodHandles.lookup;
5572
import static org.hibernate.generator.values.internal.GeneratedValuesHelper.noCustomSql;
5673
import static org.hibernate.internal.NaturalIdHelper.getNaturalIdPropertyNames;
74+
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
5775
import static org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer.UniqueSemantic.NONE;
5876
import static org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingOptions.NO_OPTIONS;
5977

@@ -62,7 +80,7 @@
6280
*/
6381
@Internal
6482
public class ReactiveGeneratedValuesHelper {
65-
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( IdentifierGeneratorHelper.class );
83+
private static final Log LOG = make( Log.class, lookup() );
6684

6785
/**
6886
* @see GeneratedValuesHelper#getGeneratedValuesDelegate(EntityPersister, EventType)
@@ -232,4 +250,53 @@ private static CompletionStage<Object[]> readGeneratedValues(
232250
return results.get( 0 );
233251
} );
234252
}
253+
254+
public static Generator augmentWithReactiveGenerator(
255+
Generator generator,
256+
GeneratorCreationContext creationContext,
257+
RuntimeModelCreationContext runtimeModelCreationContext) {
258+
if ( generator instanceof SequenceStyleGenerator sequenceStyleGenerator) {
259+
final DatabaseStructure structure = sequenceStyleGenerator.getDatabaseStructure();
260+
if ( structure instanceof TableStructure ) {
261+
return initialize( (IdentifierGenerator) generator, new EmulatedSequenceReactiveIdentifierGenerator( (TableStructure) structure, runtimeModelCreationContext ), creationContext );
262+
}
263+
if ( structure instanceof SequenceStructure ) {
264+
return initialize( (IdentifierGenerator) generator, new ReactiveSequenceIdentifierGenerator( structure, runtimeModelCreationContext ), creationContext );
265+
}
266+
throw LOG.unknownStructureType();
267+
}
268+
if ( generator instanceof TableGenerator tableGenerator ) {
269+
return initialize(
270+
(IdentifierGenerator) generator,
271+
new TableReactiveIdentifierGenerator( tableGenerator, runtimeModelCreationContext ),
272+
creationContext
273+
);
274+
}
275+
if ( generator instanceof SelectGenerator ) {
276+
throw LOG.selectGeneratorIsNotSupportedInHibernateReactive();
277+
}
278+
if ( generator instanceof CompositeNestedGeneratedValueGenerator compositeNestedGeneratedValueGenerator ) {
279+
final ReactiveCompositeNestedGeneratedValueGenerator reactiveCompositeNestedGeneratedValueGenerator = new ReactiveCompositeNestedGeneratedValueGenerator(
280+
compositeNestedGeneratedValueGenerator,
281+
creationContext,
282+
runtimeModelCreationContext
283+
);
284+
return initialize(
285+
(IdentifierGenerator) generator,
286+
reactiveCompositeNestedGeneratedValueGenerator,
287+
creationContext
288+
);
289+
}
290+
//nothing to do
291+
return generator;
292+
}
293+
294+
private static Generator initialize(
295+
IdentifierGenerator idGenerator,
296+
ReactiveIdentifierGenerator<?> reactiveIdGenerator,
297+
GeneratorCreationContext creationContext) {
298+
( (Configurable) reactiveIdGenerator ).initialize( creationContext.getSqlStringGenerationContext() );
299+
return new ReactiveGeneratorWrapper( reactiveIdGenerator, idGenerator );
300+
}
301+
235302
}

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: 95 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.util.Map;
99

10+
import org.hibernate.boot.model.relational.Database;
1011
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
1112
import org.hibernate.boot.spi.BootstrapContext;
1213
import org.hibernate.boot.spi.MetadataImplementor;
@@ -16,21 +17,30 @@
1617
import org.hibernate.engine.jdbc.spi.JdbcServices;
1718
import org.hibernate.engine.spi.SessionFactoryImplementor;
1819
import org.hibernate.generator.Generator;
20+
import org.hibernate.generator.GeneratorCreationContext;
1921
import org.hibernate.mapping.GeneratorSettings;
2022
import org.hibernate.mapping.PersistentClass;
23+
import org.hibernate.mapping.Property;
24+
import org.hibernate.mapping.RootClass;
25+
import org.hibernate.mapping.SimpleValue;
2126
import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
2227
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
23-
import org.hibernate.persister.entity.EntityPersister;
2428
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
2529
import org.hibernate.reactive.boot.spi.ReactiveBootstrapContextAdapter;
26-
import org.hibernate.reactive.tuple.entity.ReactiveEntityMetamodel;
30+
import org.hibernate.reactive.logging.impl.Log;
2731
import org.hibernate.service.ServiceRegistry;
28-
import org.hibernate.tuple.entity.EntityMetamodel;
32+
import org.hibernate.type.Type;
2933
import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry;
3034
import org.hibernate.type.spi.TypeConfiguration;
3135

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

42+
private static final Log LOG = make( Log.class, lookup() );
43+
3444
private final RuntimeModelCreationContext delegate;
3545
private final BootstrapContext bootstrapContext;
3646

@@ -39,11 +49,6 @@ public ReactiveRuntimeModelCreationContext(RuntimeModelCreationContext delegate)
3949
bootstrapContext = new ReactiveBootstrapContextAdapter( delegate.getBootstrapContext() );
4050
}
4151

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

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
@@ -196,8 +196,8 @@ private void threadCheck() {
196196
}
197197

198198
@Override
199-
protected PersistenceContext createPersistenceContext() {
200-
return new ReactivePersistenceContextAdapter( super.createPersistenceContext() );
199+
protected PersistenceContext createPersistenceContext(SessionCreationOptions options) {
200+
return new ReactivePersistenceContextAdapter( super.createPersistenceContext( options ) );
201201
}
202202

203203
@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 & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.util.Set;
99
import java.util.function.Function;
1010

11-
1211
import org.hibernate.boot.model.relational.Database;
1312
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
1413
import org.hibernate.bytecode.spi.BytecodeEnhancementMetadata;
@@ -29,7 +28,6 @@
2928
import org.hibernate.mapping.RootClass;
3029
import org.hibernate.mapping.SimpleValue;
3130
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
32-
import org.hibernate.persister.entity.EntityPersister;
3331
import org.hibernate.reactive.bythecode.spi.ReactiveBytecodeEnhancementMetadataPojoImplAdapter;
3432
import org.hibernate.reactive.id.ReactiveIdentifierGenerator;
3533
import org.hibernate.reactive.id.impl.EmulatedSequenceReactiveIdentifierGenerator;
@@ -46,28 +44,29 @@
4644
import static java.lang.invoke.MethodHandles.lookup;
4745
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
4846

47+
/**
48+
* @deprecated No Longer used
49+
*/
50+
@Deprecated(since = "4.2", forRemoval = true)
4951
public class ReactiveEntityMetamodel extends EntityMetamodel {
5052

5153
private static final Log LOG = make( Log.class, lookup() );
5254

5355
public ReactiveEntityMetamodel(
5456
PersistentClass persistentClass,
55-
EntityPersister persister,
5657
RuntimeModelCreationContext creationContext) {
5758
this(
5859
persistentClass,
59-
persister,
6060
creationContext,
6161
s -> buildIdGenerator( s, persistentClass, creationContext )
6262
);
6363
}
6464

6565
public ReactiveEntityMetamodel(
6666
PersistentClass persistentClass,
67-
EntityPersister persister,
6867
RuntimeModelCreationContext creationContext,
6968
Function<String, Generator> generatorSupplier) {
70-
super( persistentClass, persister, creationContext, generatorSupplier );
69+
super( persistentClass, creationContext, generatorSupplier );
7170
}
7271

7372
private static Generator buildIdGenerator(

0 commit comments

Comments
 (0)