diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityUpdateAction.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityUpdateAction.java index 4a6b5e149..4d212ee72 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityUpdateAction.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveEntityUpdateAction.java @@ -94,7 +94,7 @@ public CompletionStage reactiveExecute() throws HibernateException { .thenAccept( v -> { handleDeleted( entry ); updateCacheItem( persister, ck, entry ); - handleNaturalIdResolutions( persister, session, id ); + handleNaturalIdSharedResolutions( id, persister, session.getPersistenceContext() ); postUpdate(); final StatisticsImplementor statistics = session.getFactory().getStatistics(); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java index ba3edda4a..82964597b 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java @@ -200,7 +200,7 @@ private static void evictEntity(Object entity, EntityPersister persister, Object ); final SoftLock lock = cache.lockItem( source, ck, previousVersion ); cache.remove(source, ck ); - source.getActionQueue().registerProcess( (success, session) -> cache.unlockItem( session, ck, lock ) ); + source.getActionQueue().registerCallback( (success, session) -> cache.unlockItem( session, ck, lock ) ); } } @@ -314,7 +314,7 @@ private void evictCachedCollections(Type[] types, Object id, EventSource source) ); final SoftLock lock = cache.lockItem( source, ck, null ); cache.remove( source, ck ); - actionQueue.registerProcess( (success, session) -> cache.unlockItem( session, ck, lock ) ); + actionQueue.registerCallback( (success, session) -> cache.unlockItem( session, ck, lock ) ); } } else if ( type.isComponentType() ) { diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/generator/values/internal/ReactiveGeneratedValuesHelper.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/generator/values/internal/ReactiveGeneratedValuesHelper.java index e842adf11..21e44cde6 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/generator/values/internal/ReactiveGeneratedValuesHelper.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/generator/values/internal/ReactiveGeneratedValuesHelper.java @@ -10,22 +10,38 @@ import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.generator.EventType; +import org.hibernate.generator.Generator; +import org.hibernate.generator.GeneratorCreationContext; import org.hibernate.generator.values.GeneratedValueBasicResultBuilder; import org.hibernate.generator.values.GeneratedValues; import org.hibernate.generator.values.GeneratedValuesMutationDelegate; import org.hibernate.generator.values.internal.GeneratedValuesHelper; import org.hibernate.generator.values.internal.GeneratedValuesImpl; import org.hibernate.generator.values.internal.GeneratedValuesMappingProducer; -import org.hibernate.id.IdentifierGeneratorHelper; +import org.hibernate.id.CompositeNestedGeneratedValueGenerator; +import org.hibernate.id.Configurable; +import org.hibernate.id.IdentifierGenerator; +import org.hibernate.id.SelectGenerator; +import org.hibernate.id.enhanced.DatabaseStructure; +import org.hibernate.id.enhanced.SequenceStructure; +import org.hibernate.id.enhanced.SequenceStyleGenerator; +import org.hibernate.id.enhanced.TableGenerator; +import org.hibernate.id.enhanced.TableStructure; import org.hibernate.id.insert.GetGeneratedKeysDelegate; import org.hibernate.id.insert.UniqueKeySelectingDelegate; -import org.hibernate.internal.CoreLogging; -import org.hibernate.internal.CoreMessageLogger; import org.hibernate.metamodel.mapping.ModelPart; +import org.hibernate.metamodel.spi.RuntimeModelCreationContext; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.pretty.MessageHelper; import org.hibernate.query.spi.QueryOptions; +import org.hibernate.reactive.id.ReactiveIdentifierGenerator; +import org.hibernate.reactive.id.impl.EmulatedSequenceReactiveIdentifierGenerator; +import org.hibernate.reactive.id.impl.ReactiveCompositeNestedGeneratedValueGenerator; +import org.hibernate.reactive.id.impl.ReactiveGeneratorWrapper; +import org.hibernate.reactive.id.impl.ReactiveSequenceIdentifierGenerator; +import org.hibernate.reactive.id.impl.TableReactiveIdentifierGenerator; import org.hibernate.reactive.id.insert.ReactiveInsertReturningDelegate; +import org.hibernate.reactive.logging.impl.Log; import org.hibernate.reactive.sql.exec.spi.ReactiveRowProcessingState; import org.hibernate.reactive.sql.exec.spi.ReactiveValuesResultSet; import org.hibernate.reactive.sql.results.internal.ReactiveDirectResultSetAccess; @@ -48,8 +64,10 @@ import java.util.List; import java.util.concurrent.CompletionStage; +import static java.lang.invoke.MethodHandles.lookup; import static org.hibernate.generator.values.internal.GeneratedValuesHelper.noCustomSql; import static org.hibernate.internal.NaturalIdHelper.getNaturalIdPropertyNames; +import static org.hibernate.reactive.logging.impl.LoggerFactory.make; import static org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer.UniqueSemantic.NONE; /** @@ -57,7 +75,7 @@ */ @Internal public class ReactiveGeneratedValuesHelper { - private static final CoreMessageLogger LOG = CoreLogging.messageLogger( IdentifierGeneratorHelper.class ); + private static final Log LOG = make( Log.class, lookup() ); /** * @@ -225,4 +243,53 @@ public boolean shouldReturnProxies() { return results.get( 0 ); } ); } + + public static Generator augmentWithReactiveGenerator( + Generator generator, + GeneratorCreationContext creationContext, + RuntimeModelCreationContext runtimeModelCreationContext) { + if ( generator instanceof SequenceStyleGenerator sequenceStyleGenerator) { + final DatabaseStructure structure = sequenceStyleGenerator.getDatabaseStructure(); + if ( structure instanceof TableStructure ) { + return initialize( (IdentifierGenerator) generator, new EmulatedSequenceReactiveIdentifierGenerator( (TableStructure) structure, runtimeModelCreationContext ), creationContext ); + } + if ( structure instanceof SequenceStructure ) { + return initialize( (IdentifierGenerator) generator, new ReactiveSequenceIdentifierGenerator( structure, runtimeModelCreationContext ), creationContext ); + } + throw LOG.unknownStructureType(); + } + if ( generator instanceof TableGenerator tableGenerator ) { + return initialize( + (IdentifierGenerator) generator, + new TableReactiveIdentifierGenerator( tableGenerator, runtimeModelCreationContext ), + creationContext + ); + } + if ( generator instanceof SelectGenerator ) { + throw LOG.selectGeneratorIsNotSupportedInHibernateReactive(); + } + if ( generator instanceof CompositeNestedGeneratedValueGenerator compositeNestedGeneratedValueGenerator ) { + final ReactiveCompositeNestedGeneratedValueGenerator reactiveCompositeNestedGeneratedValueGenerator = new ReactiveCompositeNestedGeneratedValueGenerator( + compositeNestedGeneratedValueGenerator, + creationContext, + runtimeModelCreationContext + ); + return initialize( + (IdentifierGenerator) generator, + reactiveCompositeNestedGeneratedValueGenerator, + creationContext + ); + } + //nothing to do + return generator; + } + + private static Generator initialize( + IdentifierGenerator idGenerator, + ReactiveIdentifierGenerator reactiveIdGenerator, + GeneratorCreationContext creationContext) { + ( (Configurable) reactiveIdGenerator ).initialize( creationContext.getSqlStringGenerationContext() ); + return new ReactiveGeneratorWrapper( reactiveIdGenerator, idGenerator ); + } + } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/ReactiveCompositeNestedGeneratedValueGenerator.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/ReactiveCompositeNestedGeneratedValueGenerator.java index cb6b03ab5..1da85ecc1 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/ReactiveCompositeNestedGeneratedValueGenerator.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/ReactiveCompositeNestedGeneratedValueGenerator.java @@ -13,9 +13,9 @@ import org.hibernate.id.IdentifierGenerationException; import org.hibernate.mapping.Component; import org.hibernate.metamodel.spi.RuntimeModelCreationContext; +import org.hibernate.reactive.generator.values.internal.ReactiveGeneratedValuesHelper; import org.hibernate.reactive.id.ReactiveIdentifierGenerator; import org.hibernate.reactive.session.ReactiveConnectionSupplier; -import org.hibernate.reactive.tuple.entity.ReactiveEntityMetamodel; import java.util.ArrayList; import java.util.List; @@ -46,7 +46,7 @@ private static List reactivePlans( final List plans = new ArrayList<>(); for ( GenerationPlan plan : generator.getGenerationPlans() ) { final GenerationPlan reactivePlane = new Component.ValueGenerationPlan( - (BeforeExecutionGenerator) ReactiveEntityMetamodel.augmentWithReactiveGenerator( + (BeforeExecutionGenerator) ReactiveGeneratedValuesHelper.augmentWithReactiveGenerator( plan.getGenerator(), creationContext, runtimeModelCreationContext diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java index 33e8465b2..7a9b3e70f 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java @@ -36,9 +36,9 @@ import org.hibernate.sql.ast.tree.select.QuerySpec; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.internal.JdbcParameterImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.graph.DomainResult; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java index 0960a2ebc..40ec2ccb0 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java @@ -27,10 +27,10 @@ import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.internal.JdbcParameterImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java index 230ba5ef4..0371e7285 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java @@ -22,7 +22,7 @@ import org.hibernate.metamodel.mapping.PluralAttributeMapping; import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java index 90edf7d0d..7d243df2c 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java @@ -27,8 +27,8 @@ import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java index cee82c475..b0c2403ae 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java @@ -25,7 +25,7 @@ import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.SqlAstTranslatorFactory; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.results.graph.DomainResult; import org.hibernate.sql.results.internal.ResultsHelper; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java index 04f971ffd..ebcd5c1d8 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java @@ -26,8 +26,8 @@ import org.hibernate.reactive.loader.ast.spi.ReactiveSingleIdEntityLoader; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import static org.hibernate.loader.ast.internal.MultiKeyLoadLogging.MULTI_KEY_LOAD_LOGGER; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java index 0cbfda1c3..f1deb7615 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java @@ -24,7 +24,7 @@ import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java index e15c42956..a4f1bb6f0 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java @@ -30,9 +30,9 @@ import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java index ef81c828e..dc9798f70 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java @@ -34,10 +34,10 @@ import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.internal.JdbcParameterImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java index 5661c3493..dec1485d7 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java @@ -39,8 +39,8 @@ import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java index e5ec58e5d..f5f4b2dc8 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java @@ -12,9 +12,9 @@ import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.ExecutionContext; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java index 08b83cd47..af8c98899 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java @@ -39,9 +39,9 @@ import org.hibernate.sql.ast.tree.select.QuerySpec; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.Callback; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; import org.hibernate.sql.results.graph.DomainResult; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java index 09490cdad..99bbbd100 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java @@ -31,9 +31,9 @@ import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.Callback; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveRuntimeModelCreationContext.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveRuntimeModelCreationContext.java index 876312b47..dcddd6be5 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveRuntimeModelCreationContext.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveRuntimeModelCreationContext.java @@ -5,8 +5,7 @@ */ package org.hibernate.reactive.metamodel.mapping.internal; -import java.util.Map; - +import org.hibernate.boot.model.relational.Database; import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.boot.spi.BootstrapContext; import org.hibernate.boot.spi.MetadataImplementor; @@ -16,31 +15,38 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.generator.Generator; +import org.hibernate.generator.GeneratorCreationContext; import org.hibernate.mapping.GeneratorSettings; import org.hibernate.mapping.PersistentClass; +import org.hibernate.mapping.Property; +import org.hibernate.mapping.RootClass; +import org.hibernate.mapping.SimpleValue; +import org.hibernate.mapping.Value; import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.metamodel.spi.RuntimeModelCreationContext; -import org.hibernate.persister.entity.EntityPersister; import org.hibernate.query.sqm.function.SqmFunctionRegistry; -import org.hibernate.reactive.tuple.entity.ReactiveEntityMetamodel; +import org.hibernate.reactive.logging.impl.Log; import org.hibernate.service.ServiceRegistry; -import org.hibernate.tuple.entity.EntityMetamodel; +import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry; import org.hibernate.type.spi.TypeConfiguration; +import java.util.Map; + +import static java.lang.invoke.MethodHandles.lookup; +import static org.hibernate.reactive.generator.values.internal.ReactiveGeneratedValuesHelper.augmentWithReactiveGenerator; +import static org.hibernate.reactive.logging.impl.LoggerFactory.make; + public class ReactiveRuntimeModelCreationContext implements RuntimeModelCreationContext { + private static final Log LOG = make( Log.class, lookup() ); + private final RuntimeModelCreationContext delegate; public ReactiveRuntimeModelCreationContext(RuntimeModelCreationContext delegate) { this.delegate = delegate; } - @Override - public EntityMetamodel createEntityMetamodel(PersistentClass persistentClass, EntityPersister persister) { - return new ReactiveEntityMetamodel( persistentClass, persister, delegate ); - } - @Override public SessionFactoryImplementor getSessionFactory() { return delegate.getSessionFactory(); @@ -125,4 +131,91 @@ public Map getGenerators() { public GeneratorSettings getGeneratorSettings() { return delegate.getGeneratorSettings(); } + + @Override + public Generator getOrCreateIdGenerator(String rootName, PersistentClass persistentClass){ + final Generator existing = getGenerators().get( rootName ); + if ( existing != null ) { + return existing; + } + else { + final SimpleValue identifier = (SimpleValue) persistentClass.getIdentifier(); + final Generator idgenerator = augmentWithReactiveGenerator( + identifier.createGenerator( + getDialect(), + persistentClass.getRootClass(), + persistentClass.getIdentifierProperty(), + getGeneratorSettings() + ), + new IdGeneratorCreationContext( + persistentClass.getRootClass(), + persistentClass.getIdentifierProperty(), + getGeneratorSettings(), + identifier, + this + ), + this ); + getGenerators().put( rootName, idgenerator ); + return idgenerator; + } + } + + private record IdGeneratorCreationContext( + RootClass rootClass, + Property property, + GeneratorSettings defaults, + SimpleValue identifier, + RuntimeModelCreationContext buildingContext) implements GeneratorCreationContext { + + @Override + public Database getDatabase() { + return buildingContext.getBootModel().getDatabase(); + } + + @Override + public ServiceRegistry getServiceRegistry() { + return buildingContext.getBootstrapContext().getServiceRegistry(); + } + + @Override + public SqlStringGenerationContext getSqlStringGenerationContext() { + return defaults.getSqlStringGenerationContext(); + } + + @Override + public String getDefaultCatalog() { + return defaults.getDefaultCatalog(); + } + + @Override + public String getDefaultSchema() { + return defaults.getDefaultSchema(); + } + + @Override + public RootClass getRootClass() { + return rootClass; + } + + @Override + public PersistentClass getPersistentClass() { + return rootClass; + } + + @Override + public Property getProperty() { + return property; + } + + @Override + public Value getValue() { + return identifier; + } + + @Override + public Type getType() { + return identifier.getType(); + } + } + } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java index 46a71b0b8..93d5d5386 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java @@ -13,8 +13,11 @@ import java.util.function.Supplier; import org.hibernate.Cache; -import org.hibernate.internal.SessionCreationOptions; +import org.hibernate.engine.creation.internal.SessionBuilderImpl; +import org.hibernate.engine.creation.internal.SessionCreationOptions; +import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.internal.SessionFactoryImpl; +import org.hibernate.internal.SessionImpl; import org.hibernate.query.criteria.HibernateCriteriaBuilder; import org.hibernate.reactive.common.spi.Implementor; import org.hibernate.reactive.context.Context; @@ -88,7 +91,7 @@ public Context getContext() { @Override public Uni openSession() { SessionCreationOptions options = options(); - return uni( () -> connection( options.getTenantIdentifier() ) ) + return uni( () -> connection( getTenantIdentifier( options ) ) ) .chain( reactiveConnection -> create( reactiveConnection, () -> new ReactiveSessionImpl( delegate, options, reactiveConnection ) ) ) .map( s -> new MutinySessionImpl(s, this) ); @@ -118,7 +121,7 @@ private static Uni close(ReactiveConnection connection) { @Override public Uni openStatelessSession() { SessionCreationOptions options = options(); - return uni( () -> connection( options.getTenantIdentifier() ) ) + return uni( () -> connection( getTenantIdentifier( options ) ) ) .chain( reactiveConnection -> create( reactiveConnection, () -> new ReactiveStatelessSessionImpl( delegate, options, reactiveConnection ) ) ) .map( s -> new MutinyStatelessSessionImpl(s, this) ); @@ -133,12 +136,22 @@ public Uni openStatelessSession(String tenantId) { } private SessionCreationOptions options() { - return new SessionFactoryImpl.SessionBuilderImpl( delegate ); + return new SessionBuilderImpl( delegate ) { + @Override + protected SessionImplementor createSession() { + return new SessionImpl( delegate, this ); + } + }; } private SessionCreationOptions options(String tenantIdentifier) { - return new SessionFactoryImpl.SessionBuilderImpl( delegate ) - .tenantIdentifier( tenantIdentifier ); + SessionBuilderImpl sessionBuilder = new SessionBuilderImpl( delegate ) { + @Override + protected SessionImplementor createSession() { + return new SessionImpl( delegate, this ); + } + }; + return (SessionCreationOptions) sessionBuilder.tenantIdentifier( tenantIdentifier ); } private CompletionStage connection(String tenantId) { @@ -283,4 +296,9 @@ public void close() { public boolean isOpen() { return delegate.isOpen(); } + + private String getTenantIdentifier(SessionCreationOptions options) { + return options.getTenantIdentifierValue() == null ? null : delegate.getTenantIdentifierJavaType().toString( + options.getTenantIdentifierValue() ); + } } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveEntityPersister.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveEntityPersister.java index 16d6237f2..0899bbbc1 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveEntityPersister.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveEntityPersister.java @@ -10,7 +10,7 @@ import org.hibernate.LockMode; import org.hibernate.LockOptions; -import org.hibernate.bytecode.BytecodeLogging; +import org.hibernate.bytecode.enhance.internal.BytecodeEnhancementLogging; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.generator.values.GeneratedValues; import org.hibernate.loader.ast.spi.MultiIdLoadOptions; @@ -183,7 +183,7 @@ static CompletionStage forceInitialize( Object entityId, String entityName, SharedSessionContractImplementor session) { - BytecodeLogging.LOGGER.tracef( + BytecodeEnhancementLogging.ENHANCEMENT_LOGGER.tracef( "EnhancementAsProxyLazinessInterceptor#forceInitialize : %s#%s -> %s )", entityName, entityId, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java index bb4ecef88..b28e8975b 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java @@ -16,8 +16,8 @@ import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.select.SelectStatement; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/MySqlReactiveInformationExtractorImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/MySqlReactiveInformationExtractorImpl.java index 0504e44ee..b6a9920e8 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/MySqlReactiveInformationExtractorImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/MySqlReactiveInformationExtractorImpl.java @@ -64,6 +64,15 @@ protected T processPrimaryKeysResultSet( throw new UnsupportedOperationException(); } + @Override + protected T processPrimaryKeysResultSet( + String catalogFilter, + String schemaFilter, + String tableName, + ExtractionContext.ResultSetProcessor processor) throws SQLException { + throw new UnsupportedOperationException(); + } + @Override protected T processCatalogsResultSet(ExtractionContext.ResultSetProcessor processor) throws SQLException { // MySQL does not implement information_schema.information_schema_catalog_name @@ -193,4 +202,5 @@ protected T processImportedKeysResultSet( return getExtractionContext().getQueryResults( sb.toString(), parameters.toArray(), processor ); } + } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcConnectionProviderInitiator.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcConnectionProviderInitiator.java index a57f72b16..6e32d5e7f 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcConnectionProviderInitiator.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcConnectionProviderInitiator.java @@ -7,7 +7,7 @@ import org.hibernate.boot.registry.StandardServiceInitiator; import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator; -import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl; +import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProvider; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.service.spi.ServiceRegistryImplementor; @@ -28,7 +28,7 @@ public class NoJdbcConnectionProviderInitiator implements StandardServiceInitiat @Override public ConnectionProvider initiateService(Map configurationValues, ServiceRegistryImplementor registry) { ConnectionProvider provider = ConnectionProviderInitiator.INSTANCE.initiateService(configurationValues, registry); - if (provider instanceof DriverManagerConnectionProviderImpl) { + if ( provider instanceof DriverManagerConnectionProvider ) { return NoJdbcConnectionProvider.INSTANCE; } return provider; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/OracleSqlReactiveInformationExtractorImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/OracleSqlReactiveInformationExtractorImpl.java index d85b74d1e..a6cd34af0 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/OracleSqlReactiveInformationExtractorImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/OracleSqlReactiveInformationExtractorImpl.java @@ -11,13 +11,10 @@ import java.util.List; import org.hibernate.boot.model.naming.Identifier; -import org.hibernate.internal.CoreLogging; -import org.hibernate.internal.CoreMessageLogger; import org.hibernate.tool.schema.extract.spi.ExtractionContext; public class OracleSqlReactiveInformationExtractorImpl extends AbstractReactiveInformationSchemaBasedExtractorImpl { - private static final CoreMessageLogger LOG = CoreLogging.messageLogger( PostgreSqlReactiveInformationExtractorImpl.class ); public OracleSqlReactiveInformationExtractorImpl(ExtractionContext extractionContext) { super( extractionContext ); @@ -198,4 +195,27 @@ protected int dataTypeCode(String typeName) { } return super.dataTypeCode( typeName ); } + + @Override + protected T processPrimaryKeysResultSet( + String catalogFilter, + String schemaFilter, + String tableName, + ExtractionContext.ResultSetProcessor processor) throws SQLException { + final StringBuilder sb = new StringBuilder() + .append( "SELECT NULL AS table_cat, " ) + .append( "c.owner AS table_schem, " ) + .append( "c.table_name, " ) + .append( "c.column_name, " ) + .append( "c.position AS key_seq, " ) + .append( "c.constraint_name AS pk_name " ) + .append( "FROM all_cons_columns c, all_constraints k " ) + .append( "WHERE k.constraint_type = 'P' AND k.table_name = :1 AND k.owner like :2 escape '/' ") + .append( "AND k.constraint_name = c.constraint_name AND k.table_name = c.table_name AND k.owner = c.owner ORDER BY column_name"); + + List parameterValues = new ArrayList<>(2); + parameterValues.add( tableName ); + parameterValues.add( schemaFilter == null ? "%" : schemaFilter ); + return getExtractionContext().getQueryResults( sb.toString(), parameterValues.toArray(), processor ); + } } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/PostgreSqlReactiveInformationExtractorImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/PostgreSqlReactiveInformationExtractorImpl.java index 62fff7ecc..8f0d285cd 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/PostgreSqlReactiveInformationExtractorImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/PostgreSqlReactiveInformationExtractorImpl.java @@ -12,8 +12,6 @@ import java.util.List; import org.hibernate.boot.model.naming.Identifier; -import org.hibernate.internal.CoreLogging; -import org.hibernate.internal.CoreMessageLogger; import org.hibernate.tool.schema.extract.spi.ExtractionContext; import org.hibernate.type.SqlTypes; @@ -26,8 +24,6 @@ */ public class PostgreSqlReactiveInformationExtractorImpl extends AbstractReactiveInformationSchemaBasedExtractorImpl { - private static final CoreMessageLogger LOG = CoreLogging.messageLogger( PostgreSqlReactiveInformationExtractorImpl.class ); - public PostgreSqlReactiveInformationExtractorImpl(ExtractionContext extractionContext) { super( extractionContext ); } @@ -42,6 +38,14 @@ protected T processPrimaryKeysResultSet( throw new UnsupportedOperationException(); } + @Override + protected T processPrimaryKeysResultSet( + String catalogFilter, + String schemaFilter, + String tableName, + ExtractionContext.ResultSetProcessor processor) throws SQLException { + throw new UnsupportedOperationException(); + } @Override protected T processIndexInfoResultSet( String catalog, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/SqlServerReactiveInformationExtractorImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/SqlServerReactiveInformationExtractorImpl.java index eea7fc477..10d290388 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/SqlServerReactiveInformationExtractorImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/SqlServerReactiveInformationExtractorImpl.java @@ -162,6 +162,15 @@ protected T processPrimaryKeysResultSet( throw new UnsupportedOperationException(); } + @Override + protected T processPrimaryKeysResultSet( + String catalogFilter, + String schemaFilter, + String tableName, + ExtractionContext.ResultSetProcessor processor) throws SQLException { + throw new UnsupportedOperationException(); + } + @Override protected T processIndexInfoResultSet( String catalog, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeNonSelectQueryPlan.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeNonSelectQueryPlan.java index 470218e17..c5bd2e849 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeNonSelectQueryPlan.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeNonSelectQueryPlan.java @@ -21,9 +21,9 @@ import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor; import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan; import org.hibernate.reactive.sql.exec.internal.StandardReactiveJdbcMutationExecutor; +import org.hibernate.sql.exec.internal.JdbcOperationQueryMutationNative; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.JdbcOperationQueryMutation; -import org.hibernate.sql.exec.spi.JdbcOperationQueryMutationNative; import org.hibernate.sql.exec.spi.JdbcParameterBinder; import org.hibernate.sql.exec.spi.JdbcParameterBindings; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeSelectQueryPlanImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeSelectQueryPlanImpl.java index bae87b8b3..037f4d17d 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeSelectQueryPlanImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeSelectQueryPlanImpl.java @@ -26,8 +26,8 @@ import org.hibernate.reactive.query.spi.ReactiveNativeSelectQueryPlan; import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBinder; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducer; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/internal/ConcreteSqmSelectReactiveQueryPlan.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/internal/ConcreteSqmSelectReactiveQueryPlan.java index 4f499f5cf..3c69c0d74 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/internal/ConcreteSqmSelectReactiveQueryPlan.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/internal/ConcreteSqmSelectReactiveQueryPlan.java @@ -27,9 +27,9 @@ import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.ast.tree.expression.Expression; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.internal.TupleMetadata; import org.hibernate.sql.results.spi.RowTransformer; @@ -53,7 +53,7 @@ public class ConcreteSqmSelectReactiveQueryPlan extends ConcreteSqmSelectQuer private final SqmSelectStatement sqm; private final DomainParameterXref domainParameterXref; - private volatile CacheableSqmInterpretation cacheableSqmInterpretation; + private volatile CacheableSqmInterpretation cacheableSqmInterpretation; public ConcreteSqmSelectReactiveQueryPlan( SqmSelectStatement sqm, @@ -76,11 +76,11 @@ private static CompletionStage> listInterpreter( String hql, DomainParameterXref domainParameterXref, DomainQueryExecutionContext executionContext, - CacheableSqmInterpretation sqmInterpretation, + CacheableSqmInterpretation sqmInterpretation, JdbcParameterBindings jdbcParameterBindings, RowTransformer rowTransformer) { final ReactiveSharedSessionContractImplementor session = (ReactiveSharedSessionContractImplementor) executionContext.getSession(); - final JdbcOperationQuerySelect jdbcSelect = sqmInterpretation.jdbcOperation(); + final JdbcSelect jdbcSelect = sqmInterpretation.jdbcOperation(); return CompletionStages .supplyStage( () -> { @@ -123,12 +123,12 @@ private static CompletionStage executeQueryInterpreter( String hql, DomainParameterXref domainParameterXref, DomainQueryExecutionContext executionContext, - CacheableSqmInterpretation sqmInterpretation, + CacheableSqmInterpretation sqmInterpretation, JdbcParameterBindings jdbcParameterBindings, RowTransformer rowTransformer, ReactiveResultsConsumer resultsConsumer) { final ReactiveSharedSessionContractImplementor session = (ReactiveSharedSessionContractImplementor) executionContext.getSession(); - final JdbcOperationQuerySelect jdbcSelect = sqmInterpretation.jdbcOperation(); + final JdbcSelect jdbcSelect = sqmInterpretation.jdbcOperation(); return CompletionStages .supplyStage( () -> { final var subSelectFetchKeyHandler = SubselectFetch.createRegistrationHandler( @@ -161,7 +161,7 @@ private static CompletionStage executeQueryInterpreter( } private static int resultCountEstimate( - CacheableSqmInterpretation sqmInterpretation, + CacheableSqmInterpretation sqmInterpretation, JdbcParameterBindings jdbcParameterBindings) { final Expression fetchExpression = sqmInterpretation.statement().getQueryPart() .getFetchClauseExpression(); @@ -199,7 +199,7 @@ private CompletionStage withCacheableSqmInterpretation(DomainQueryExec // to protect access. However, synchronized is much simpler here. We will verify // during throughput testing whether this is an issue and consider changes then - CacheableSqmInterpretation localCopy = cacheableSqmInterpretation; + CacheableSqmInterpretation localCopy = cacheableSqmInterpretation; JdbcParameterBindings jdbcParameterBindings = null; if ( localCopy == null ) { @@ -240,7 +240,7 @@ private interface SqmInterpreter { CompletionStage interpret( X context, DomainQueryExecutionContext executionContext, - CacheableSqmInterpretation sqmInterpretation, + CacheableSqmInterpretation sqmInterpretation, JdbcParameterBindings jdbcParameterBindings); } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java index c0eb4ee3a..cba5e09aa 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java @@ -13,7 +13,7 @@ import org.hibernate.reactive.query.sqm.mutation.spi.ReactiveAbstractMutationHandler; import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import java.util.concurrent.CompletionStage; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java index 67c3641b8..5aaf573a2 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java @@ -14,7 +14,7 @@ import org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy; import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement; import org.hibernate.sql.ast.tree.cte.CteTable; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; /** diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java index 8e0740d14..bf42b0dfb 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java @@ -13,7 +13,7 @@ import org.hibernate.query.sqm.mutation.internal.cte.CteSoftDeleteHandler; import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement; import org.hibernate.sql.ast.tree.cte.CteTable; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; public class ReactiveCteSoftDeleteHandler extends CteSoftDeleteHandler implements ReactiveAbstractCteMutationHandler { diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java index c855f35ad..811f9d436 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java @@ -13,7 +13,7 @@ import org.hibernate.query.sqm.mutation.internal.cte.CteUpdateHandler; import org.hibernate.query.sqm.tree.update.SqmUpdateStatement; import org.hibernate.sql.ast.tree.cte.CteTable; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; /** diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java index 7b0bd112a..0f30f3abf 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java @@ -14,12 +14,16 @@ import org.hibernate.MappingException; import org.hibernate.ObjectDeletedException; import org.hibernate.ObjectNotFoundException; +import org.hibernate.OrderingMode; +import org.hibernate.RemovalsMode; +import org.hibernate.SessionCheckMode; import org.hibernate.TypeMismatchException; import org.hibernate.UnknownEntityTypeException; import org.hibernate.UnresolvableObjectException; import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.dialect.Dialect; +import org.hibernate.engine.creation.internal.SessionCreationOptions; import org.hibernate.engine.internal.ReactivePersistenceContextAdapter; import org.hibernate.engine.spi.EffectiveEntityGraph; import org.hibernate.engine.spi.EntityEntry; @@ -48,7 +52,6 @@ import org.hibernate.graph.GraphSemantic; import org.hibernate.graph.RootGraph; import org.hibernate.graph.spi.RootGraphImplementor; -import org.hibernate.internal.SessionCreationOptions; import org.hibernate.internal.SessionFactoryImpl; import org.hibernate.internal.SessionImpl; import org.hibernate.jpa.spi.NativeQueryTupleTransformer; @@ -167,7 +170,8 @@ public class ReactiveSessionImpl extends SessionImpl implements ReactiveSession, private transient ExceptionConverter exceptionConverter; public ReactiveSessionImpl( - SessionFactoryImpl delegate, SessionCreationOptions options, + SessionFactoryImpl delegate, + SessionCreationOptions options, ReactiveConnection connection) { super( delegate, options ); InternalStateAssertions.assertUseOnEventLoop(); @@ -195,8 +199,8 @@ private void threadCheck() { } @Override - protected PersistenceContext createPersistenceContext() { - return new ReactivePersistenceContextAdapter( super.createPersistenceContext() ); + protected PersistenceContext createPersistenceContext(SessionCreationOptions options) { + return new ReactivePersistenceContextAdapter( super.createPersistenceContext( options ) ); } @Override @@ -1446,10 +1450,9 @@ private class ReactiveMultiIdentifierLoadAccessImpl implements MultiIdLoadOpt private GraphSemantic graphSemantic; private Integer batchSize; - private boolean sessionCheckingEnabled; - private boolean returnOfDeletedEntitiesEnabled; - private boolean orderedReturnEnabled = true; - private boolean readOnly; + private SessionCheckMode sessionCheckMode = SessionCheckMode.DISABLED; + private RemovalsMode removalsMode = RemovalsMode.REPLACE; + protected OrderingMode orderingMode = OrderingMode.ORDERED; public ReactiveMultiIdentifierLoadAccessImpl(EntityPersister entityPersister) { this.entityPersister = (ReactiveEntityPersister) entityPersister; @@ -1496,8 +1499,8 @@ public ReactiveMultiIdentifierLoadAccessImpl withBatchSize(int batchSize) { } @Override - public boolean isSessionCheckingEnabled() { - return sessionCheckingEnabled; + public SessionCheckMode getSessionCheckMode() { + return sessionCheckMode; } @Override @@ -1506,27 +1509,27 @@ public boolean isSecondLevelCacheCheckingEnabled() { } public ReactiveMultiIdentifierLoadAccessImpl enableSessionCheck(boolean enabled) { - this.sessionCheckingEnabled = enabled; + this.sessionCheckMode = enabled ? SessionCheckMode.ENABLED : SessionCheckMode.DISABLED; return this; } @Override - public boolean isReturnOfDeletedEntitiesEnabled() { - return returnOfDeletedEntitiesEnabled; + public RemovalsMode getRemovalsMode() { + return removalsMode; } - public ReactiveMultiIdentifierLoadAccessImpl enableReturnOfDeletedEntities(boolean enabled) { - this.returnOfDeletedEntitiesEnabled = enabled; - return this; + @Override + public OrderingMode getOrderingMode() { + return orderingMode; } - @Override - public boolean isOrderReturnEnabled() { - return orderedReturnEnabled; + public ReactiveMultiIdentifierLoadAccessImpl enableReturnOfDeletedEntities(boolean enabled) { + this.removalsMode = enabled ? RemovalsMode.INCLUDE : RemovalsMode.REPLACE; + return this; } public ReactiveMultiIdentifierLoadAccessImpl enableOrderedReturn(boolean enabled) { - this.orderedReturnEnabled = enabled; + this.orderingMode = enabled ? OrderingMode.ORDERED : OrderingMode.UNORDERED; return this; } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java index 51cf19747..90304bc63 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java @@ -14,6 +14,7 @@ import org.hibernate.cache.spi.access.EntityDataAccess; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.dialect.Dialect; +import org.hibernate.engine.creation.internal.SessionCreationOptions; import org.hibernate.engine.internal.ReactivePersistenceContextAdapter; import org.hibernate.engine.spi.CollectionEntry; import org.hibernate.engine.spi.LoadQueryInfluencers; @@ -27,7 +28,6 @@ import org.hibernate.graph.internal.RootGraphImpl; import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.id.IdentifierGenerationException; -import org.hibernate.internal.SessionCreationOptions; import org.hibernate.internal.SessionFactoryImpl; import org.hibernate.internal.StatelessSessionImpl; import org.hibernate.jpa.spi.NativeQueryTupleTransformer; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/StandardReactiveSelectExecutor.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/StandardReactiveSelectExecutor.java index 5993d1893..bd50726b1 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/StandardReactiveSelectExecutor.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/StandardReactiveSelectExecutor.java @@ -35,8 +35,8 @@ import org.hibernate.sql.exec.SqlExecLogger; import org.hibernate.sql.exec.internal.StandardStatementCreator; import org.hibernate.sql.exec.spi.ExecutionContext; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.exec.spi.JdbcSelectExecutor; import org.hibernate.sql.results.graph.DomainResult; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; @@ -66,7 +66,7 @@ private StandardReactiveSelectExecutor() { } public CompletionStage> list( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, @@ -75,7 +75,7 @@ public CompletionStage> list( } public CompletionStage> list( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, @@ -96,7 +96,7 @@ public CompletionStage> list( * @since 2.4 (and ORM 6.6) */ public CompletionStage> list( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, @@ -119,7 +119,7 @@ public CompletionStage> list( * @since 2.4 (and Hibernate ORM 6.6) */ public CompletionStage executeQuery( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, @@ -140,7 +140,7 @@ public CompletionStage executeQuery( @Override public CompletionStage executeQuery( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, @@ -172,7 +172,7 @@ public CompletionStage executeQuery( } private CompletionStage doExecuteQuery( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer transformer, @@ -281,7 +281,7 @@ private static RowTransformer rowTransformer( public CompletionStage resolveJdbcValuesSource( String queryIdentifier, - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, boolean canBeCached, ExecutionContext executionContext, ReactiveDeferredResultSetAccess resultSetAccess) { @@ -368,7 +368,7 @@ public CompletionStage resolveJdbcValuesSource( null, queryIdentifier, queryOptions, - resultSetAccess.usesFollowOnLocking(), + false, jdbcValuesMapping, null, executionContext @@ -383,7 +383,7 @@ public CompletionStage resolveJdbcValuesSource( queryResultsCacheKey, queryIdentifier, queryOptions, - resultSetAccess.usesFollowOnLocking(), + false, jdbcValuesMapping, capturingMetadata.resolveMetadataForCache(), executionContext @@ -404,7 +404,7 @@ public CompletionStage resolveJdbcValuesSource( queryResultsCacheKey, queryIdentifier, queryOptions, - resultSetAccess.usesFollowOnLocking(), + false, jdbcValuesMapping, capturingMetadata.resolveMetadataForCache(), executionContext @@ -535,7 +535,7 @@ public Statistics(ExecutionContext executionContext, ReactiveValuesResultSet jdb } } - public void end(JdbcOperationQuerySelect jdbcSelect, T result) { + public void end(JdbcSelect jdbcSelect, T result) { if ( enabled ) { final long endTime = System.nanoTime(); final long milliseconds = TimeUnit.MILLISECONDS diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/spi/ReactiveSelectExecutor.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/spi/ReactiveSelectExecutor.java index ab68e34be..80e83a5f9 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/spi/ReactiveSelectExecutor.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/spi/ReactiveSelectExecutor.java @@ -10,10 +10,11 @@ import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.reactive.sql.results.spi.ReactiveResultsConsumer; +import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.StandardStatementCreator; import org.hibernate.sql.exec.spi.ExecutionContext; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.exec.spi.JdbcSelectExecutor; import org.hibernate.sql.results.spi.RowTransformer; @@ -46,7 +47,7 @@ default CompletionStage executeQuery( } CompletionStage executeQuery( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, @@ -56,7 +57,7 @@ CompletionStage executeQuery( ReactiveResultsConsumer resultsConsumer); CompletionStage> list( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, RowTransformer rowTransformer, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveDeferredResultSetAccess.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveDeferredResultSetAccess.java index 0d81a2f8b..d7595a902 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveDeferredResultSetAccess.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveDeferredResultSetAccess.java @@ -29,8 +29,8 @@ import org.hibernate.resource.jdbc.spi.JdbcSessionContext; import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor; import org.hibernate.sql.exec.spi.ExecutionContext; -import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.exec.spi.JdbcSelectExecutor; import org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess; import org.hibernate.sql.results.jdbc.spi.JdbcValuesMetadata; @@ -54,7 +54,7 @@ public class ReactiveDeferredResultSetAccess extends DeferredResultSetAccess imp private ResultSet resultSet; public ReactiveDeferredResultSetAccess( - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, JdbcParameterBindings jdbcParameterBindings, ExecutionContext executionContext, JdbcSelectExecutor.StatementCreator statementCreator, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveStandardRowReader.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveStandardRowReader.java index 87aa57103..f19031a55 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveStandardRowReader.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveStandardRowReader.java @@ -29,7 +29,7 @@ import static org.hibernate.reactive.logging.impl.LoggerFactory.make; import static org.hibernate.reactive.util.impl.CompletionStages.loop; import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture; -import static org.hibernate.sql.results.LoadingLogger.LOGGER; +import static org.hibernate.sql.results.LoadingLogger.LOADING_LOGGER; /** @@ -121,7 +121,7 @@ public R readRow(RowProcessingState processingState) { @Override public CompletionStage reactiveReadRow(ReactiveRowProcessingState rowProcessingState, JdbcValuesSourceProcessingOptions options) { - LOGGER.trace( "ReactiveStandardRowReader#readRow" ); + LOADING_LOGGER.trace( "ReactiveStandardRowReader#readRow" ); return coordinateInitializers( rowProcessingState ) .thenCompose( v -> { @@ -160,7 +160,7 @@ private CompletionStage booleanComponent( final boolean[] resultRow = new boolean[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -181,7 +181,7 @@ private CompletionStage byteComponent( final byte[] resultRow = new byte[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -202,7 +202,7 @@ private CompletionStage charComponent( final char[] resultRow = new char[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -223,7 +223,7 @@ private CompletionStage shortComponent( final short[] resultRow = new short[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -244,7 +244,7 @@ private CompletionStage intComponent( final int[] resultRow = new int[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -265,7 +265,7 @@ private CompletionStage longComponent( final long[] resultRow = new long[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -286,7 +286,7 @@ private CompletionStage floatComponent( final float[] resultRow = new float[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -307,7 +307,7 @@ private CompletionStage doubleComponent( final double[] resultRow = new double[resultAssemblers.length]; return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -328,7 +328,7 @@ private CompletionStage objectComponent( final Object[] resultRow = (Object[]) Array.newInstance( resultElementClass, resultAssemblers.length ); return loop( 0, assemblerCount, i -> { final DomainResultAssembler assembler = resultAssemblers[i]; - LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); + LOADING_LOGGER.debugf( "Calling top-level assembler (%s / %s) : %s", i, assemblerCount, assembler ); if ( assembler instanceof ReactiveDomainResultsAssembler ) { return ( (ReactiveDomainResultsAssembler) assembler ) .reactiveAssemble( rowProcessingState, options ) @@ -362,7 +362,7 @@ public List> getResultJavaTypes() { } private void afterRow(RowProcessingState rowProcessingState) { - LOGGER.trace( "ReactiveStandardRowReader#afterRow" ); + LOADING_LOGGER.trace( "ReactiveStandardRowReader#afterRow" ); finishUpRow(); } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/spi/ReactiveListResultsConsumer.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/spi/ReactiveListResultsConsumer.java index e7283647f..108920f1a 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/spi/ReactiveListResultsConsumer.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/spi/ReactiveListResultsConsumer.java @@ -271,7 +271,7 @@ private JavaType resolveDomainResultJavaType( return (JavaType) resultJavaTypes.get( 0 ); } - return javaTypeRegistry.resolveDescriptor( Object[].class ); + return javaTypeRegistry.getDescriptor( Object[].class ); } @Override diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java index 56c574ce4..2c8a3c473 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java @@ -7,8 +7,11 @@ import jakarta.persistence.metamodel.Metamodel; import org.hibernate.Cache; -import org.hibernate.internal.SessionCreationOptions; +import org.hibernate.engine.creation.internal.SessionBuilderImpl; +import org.hibernate.engine.creation.internal.SessionCreationOptions; +import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.internal.SessionFactoryImpl; +import org.hibernate.internal.SessionImpl; import org.hibernate.query.criteria.HibernateCriteriaBuilder; import org.hibernate.reactive.common.spi.Implementor; import org.hibernate.reactive.context.Context; @@ -76,7 +79,7 @@ public Context getContext() { @Override public CompletionStage openSession() { SessionCreationOptions options = options(); - return connection( options.getTenantIdentifier() ) + return connection( getTenantIdentifier( options ) ) .thenCompose( connection -> create( connection, () -> new ReactiveSessionImpl( delegate, options, connection ) ) ) .thenApply( StageSessionImpl::new ); @@ -93,7 +96,7 @@ public CompletionStage openSession(String tenantId) { @Override public CompletionStage openStatelessSession() { SessionCreationOptions options = options(); - return connection( options.getTenantIdentifier() ) + return connection( getTenantIdentifier( options ) ) .thenCompose( connection -> create( connection, () -> new ReactiveStatelessSessionImpl( delegate, options, connection ) ) ) .thenApply( StageStatelessSessionImpl::new ); @@ -124,12 +127,26 @@ private CompletionStage create(ReactiveConnection connection, Supplier } private SessionCreationOptions options() { - return new SessionFactoryImpl.SessionBuilderImpl( delegate ); + return new SessionBuilderImpl( delegate ) { + @Override + protected SessionImplementor createSession() { + return new SessionImpl( delegate, this ); + } + }; } - private SessionCreationOptions options(String tenantIdentifier) { - return new SessionFactoryImpl.SessionBuilderImpl( delegate ) - .tenantIdentifier( tenantIdentifier ); + private SessionCreationOptions options(String tenantId) { + return new SessionBuilderImpl( delegate ) { + @Override + protected SessionImplementor createSession() { + return new SessionImpl( delegate, this ); + } + + @Override + public Object getTenantIdentifierValue() { + return tenantId; + } + }; } private CompletionStage connection(String tenantId) { @@ -288,4 +305,8 @@ public HibernateCriteriaBuilder getCriteriaBuilder() { return delegate.getCriteriaBuilder(); } + private String getTenantIdentifier(SessionCreationOptions options) { + return options.getTenantIdentifierValue() == null ? null : delegate.getTenantIdentifierJavaType().toString( + options.getTenantIdentifierValue() ); + } } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/tuple/entity/ReactiveEntityMetamodel.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/tuple/entity/ReactiveEntityMetamodel.java index 14e227358..4ee972218 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/tuple/entity/ReactiveEntityMetamodel.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/tuple/entity/ReactiveEntityMetamodel.java @@ -26,8 +26,8 @@ import org.hibernate.mapping.Property; import org.hibernate.mapping.RootClass; import org.hibernate.mapping.SimpleValue; +import org.hibernate.mapping.Value; import org.hibernate.metamodel.spi.RuntimeModelCreationContext; -import org.hibernate.persister.entity.EntityPersister; import org.hibernate.reactive.id.ReactiveIdentifierGenerator; import org.hibernate.reactive.id.impl.EmulatedSequenceReactiveIdentifierGenerator; import org.hibernate.reactive.id.impl.ReactiveCompositeNestedGeneratedValueGenerator; @@ -42,17 +42,19 @@ import static java.lang.invoke.MethodHandles.lookup; import static org.hibernate.reactive.logging.impl.LoggerFactory.make; +/** + * @deprecated No Longer used + */ +@Deprecated(since = "4.2", forRemoval = true) public class ReactiveEntityMetamodel extends EntityMetamodel { private static final Log LOG = make( Log.class, lookup() ); public ReactiveEntityMetamodel( PersistentClass persistentClass, - EntityPersister persister, RuntimeModelCreationContext creationContext) { this( persistentClass, - persister, creationContext, s -> buildIdGenerator( s, persistentClass, creationContext ) ); @@ -60,10 +62,9 @@ public ReactiveEntityMetamodel( public ReactiveEntityMetamodel( PersistentClass persistentClass, - EntityPersister persister, RuntimeModelCreationContext creationContext, Function generatorSupplier) { - super( persistentClass, persister, creationContext, generatorSupplier ); + super( persistentClass, creationContext, generatorSupplier ); } private static Generator buildIdGenerator( @@ -191,6 +192,11 @@ public Property getProperty() { return property; } + @Override + public Value getValue() { + return identifier; + } + @Override public Type getType() { return identifier.getType(); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/type/descriptor/jdbc/ReactiveArrayJdbcType.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/type/descriptor/jdbc/ReactiveArrayJdbcType.java index 99d7efaf7..5aee97bc7 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/type/descriptor/jdbc/ReactiveArrayJdbcType.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/type/descriptor/jdbc/ReactiveArrayJdbcType.java @@ -6,6 +6,7 @@ package org.hibernate.reactive.type.descriptor.jdbc; import java.lang.reflect.Array; +import java.lang.reflect.Type; import java.sql.CallableStatement; import java.sql.Date; import java.sql.PreparedStatement; @@ -20,6 +21,7 @@ import org.hibernate.reactive.adaptor.impl.ArrayAdaptor; import org.hibernate.reactive.adaptor.impl.ResultSetAdaptor; +import org.hibernate.type.BasicPluralType; import org.hibernate.type.descriptor.ValueBinder; import org.hibernate.type.descriptor.ValueExtractor; import org.hibernate.type.descriptor.WrapperOptions; @@ -32,8 +34,10 @@ import org.hibernate.type.descriptor.jdbc.JdbcLiteralFormatter; import org.hibernate.type.descriptor.jdbc.JdbcType; import org.hibernate.type.descriptor.jdbc.internal.JdbcLiteralFormatterArray; +import org.hibernate.type.internal.ParameterizedTypeImpl; import org.hibernate.type.spi.TypeConfiguration; +import static java.lang.reflect.Array.newInstance; /** @@ -63,10 +67,22 @@ public JavaType getJdbcRecommendedJavaTypeMapping( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - final JavaType elementJavaType = elementJdbcType - .getJdbcRecommendedJavaTypeMapping( precision, scale, typeConfiguration ); - return typeConfiguration.getJavaTypeRegistry() - .resolveDescriptor( Array.newInstance( elementJavaType.getJavaTypeClass(), 0 ).getClass() ); + final JavaType elementJavaType = + elementJdbcType.getJdbcRecommendedJavaTypeMapping( precision, scale, typeConfiguration ); + final var javaType = + typeConfiguration.getJavaTypeRegistry() + .resolveDescriptor( newInstance( elementJavaType.getJavaTypeClass(), 0 ).getClass() ); + if ( javaType instanceof BasicPluralType ) { + //noinspection unchecked + return (JavaType) javaType; + } + else { + //noinspection unchecked + return (JavaType) javaType.createJavaType( + new ParameterizedTypeImpl( javaType.getJavaTypeClass(), new Type[0], null ), + typeConfiguration + ); + } } @Override diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateCockroachDBTestBase.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateCockroachDBTestBase.java index 44b34c154..24e8921dd 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateCockroachDBTestBase.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateCockroachDBTestBase.java @@ -35,8 +35,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.COCKROACHDB; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMariaDBTestBase.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMariaDBTestBase.java index 7afed941e..dde639cda 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMariaDBTestBase.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMariaDBTestBase.java @@ -34,8 +34,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.MARIA; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMySqlTestBase.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMySqlTestBase.java index 501a72282..064de5cff 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMySqlTestBase.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateMySqlTestBase.java @@ -34,8 +34,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.MYSQL; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateOracleTestBase.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateOracleTestBase.java index 4f46641a1..42c8e592d 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateOracleTestBase.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateOracleTestBase.java @@ -34,8 +34,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.ORACLE; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdatePostgreSqlTestBase.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdatePostgreSqlTestBase.java index ded7f0904..7ae699b65 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdatePostgreSqlTestBase.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdatePostgreSqlTestBase.java @@ -34,8 +34,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.POSTGRESQL; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateSqlServerTestBase.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateSqlServerTestBase.java index 1ebcf85d7..3a1aa8fb6 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateSqlServerTestBase.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateSqlServerTestBase.java @@ -35,8 +35,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.SQLSERVER; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateTest.java index febcda93b..776a53bc4 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaUpdateTest.java @@ -32,8 +32,8 @@ import static org.hibernate.reactive.containers.DatabaseConfiguration.dbType; import static org.hibernate.reactive.testing.ReactiveAssertions.assertThrown; import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.params.provider.Arguments.arguments; /** diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaValidationTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaValidationTest.java index 56def4ef9..d6f953365 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaValidationTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/schema/SchemaValidationTest.java @@ -35,8 +35,8 @@ import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.MARIA; import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.MYSQL; import static org.hibernate.reactive.testing.ReactiveAssertions.assertThrown; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.GROUPED; -import static org.hibernate.tool.schema.JdbcMetadaAccessStrategy.INDIVIDUALLY; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.GROUPED; +import static org.hibernate.tool.schema.JdbcMetadataAccessStrategy.INDIVIDUALLY; import static org.junit.jupiter.params.provider.Arguments.arguments; /** @@ -119,7 +119,7 @@ context, setupFactory( strategy, type ) @MethodSource("settings") @Timeout(value = 10, timeUnit = MINUTES) public void testValidationFails(String strategy, String type, VertxTestContext context) { - final String errorMessage = "Schema-validation: missing table [" + Extra.TABLE_NAME + "]"; + final String errorMessage = "Schema validation: missing table [" + Extra.TABLE_NAME + "]"; test( context, setupFactory( strategy, type ) .thenCompose( v -> {