Skip to content

Commit 2710143

Browse files
SanneDavideD
authored andcommitted
Leverage HHH-16227 to plug custom SqmMultiTableMutationStrategy and SqmMultiTableInsertStrategy implementations
1 parent 18c89ea commit 2710143

File tree

4 files changed

+83
-4
lines changed

4 files changed

+83
-4
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/dialect/ReactiveDialectWrapper.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy;
1414
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategy;
1515
import org.hibernate.reactive.dialect.identity.ReactiveIdentityColumnSupportAdapter;
16-
import org.hibernate.reactive.query.sqm.mutation.internal.cte.ReactiveCteInsertStrategy;
17-
import org.hibernate.reactive.query.sqm.mutation.internal.cte.ReactiveCteMutationStrategy;
1816

1917
/**
2018
* Wraps the given dialect to make some internal components reactive;
@@ -36,14 +34,17 @@ public IdentityColumnSupport getIdentityColumnSupport() {
3634
public SqmMultiTableMutationStrategy getFallbackSqmMutationStrategy(
3735
EntityMappingType rootEntityDescriptor,
3836
RuntimeModelCreationContext runtimeModelCreationContext) {
39-
return new ReactiveCteMutationStrategy( rootEntityDescriptor, runtimeModelCreationContext );
37+
throw new IllegalStateException(
38+
"Should never be called - see ReactiveSqmMultiTableMutationStrategyProvider" );
4039
}
4140

4241
@Override
4342
public SqmMultiTableInsertStrategy getFallbackSqmInsertStrategy(
4443
EntityMappingType rootEntityDescriptor,
4544
RuntimeModelCreationContext runtimeModelCreationContext) {
46-
return new ReactiveCteInsertStrategy( rootEntityDescriptor, runtimeModelCreationContext );
45+
throw new IllegalStateException(
46+
"Should never be called - see ReactiveSqmMultiTableMutationStrategyProvider" );
47+
4748
}
4849

4950
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/impl/ReactiveServiceInitiators.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.hibernate.reactive.provider.service.ReactivePersisterClassResolverInitiator;
3737
import org.hibernate.reactive.provider.service.ReactiveSchemaManagementToolInitiator;
3838
import org.hibernate.reactive.provider.service.ReactiveSessionFactoryBuilderInitiator;
39+
import org.hibernate.reactive.provider.service.ReactiveSqmMultiTableMutationStrategyProviderInitiator;
3940
import org.hibernate.reactive.provider.service.ReactiveValuesMappingProducerProviderInitiator;
4041
import org.hibernate.reactive.vertx.impl.VertxInstanceInitiator;
4142
import org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator;
@@ -129,6 +130,9 @@ private static List<StandardServiceInitiator<?>> buildInitialServiceInitiatorLis
129130
//Custom for Hibernate Reactive:
130131
serviceInitiators.add( ReactiveValuesMappingProducerProviderInitiator.INSTANCE );
131132

133+
//Custom for Hibernate Reactive:
134+
serviceInitiators.add( ReactiveSqmMultiTableMutationStrategyProviderInitiator.INSTANCE );
135+
132136
serviceInitiators.trimToSize();
133137

134138
return unmodifiableList( serviceInitiators );
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.provider.service;
7+
8+
import org.hibernate.metamodel.mapping.EntityMappingType;
9+
import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess;
10+
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
11+
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy;
12+
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategy;
13+
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategyProvider;
14+
import org.hibernate.reactive.query.sqm.mutation.internal.cte.ReactiveCteInsertStrategy;
15+
import org.hibernate.reactive.query.sqm.mutation.internal.cte.ReactiveCteMutationStrategy;
16+
17+
public class ReactiveSqmMultiTableMutationStrategyProvider implements SqmMultiTableMutationStrategyProvider {
18+
19+
@Override
20+
public SqmMultiTableMutationStrategy createMutationStrategy(
21+
EntityMappingType rootEntityDescriptor,
22+
MappingModelCreationProcess creationProcess) {
23+
final RuntimeModelCreationContext creationContext = creationProcess.getCreationContext();
24+
25+
//TODO there's more flavours in ORM ? And what do we do about explicitly configured instances & Dialect produced implementations?
26+
return new ReactiveCteMutationStrategy( rootEntityDescriptor, creationContext );
27+
}
28+
29+
@Override
30+
public SqmMultiTableInsertStrategy createInsertStrategy(
31+
EntityMappingType rootEntityDescriptor,
32+
MappingModelCreationProcess creationProcess) {
33+
final RuntimeModelCreationContext creationContext = creationProcess.getCreationContext();
34+
35+
//TODO there's more flavours in ORM ? And what do we do about explicitly configured instances & Dialect produced implementations?
36+
return new ReactiveCteInsertStrategy( rootEntityDescriptor, creationContext );
37+
}
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.provider.service;
7+
8+
import java.util.Map;
9+
10+
import org.hibernate.boot.registry.StandardServiceInitiator;
11+
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategyProvider;
12+
import org.hibernate.service.spi.ServiceRegistryImplementor;
13+
14+
/**
15+
* Custom variations for SqmMultiTableMutationStrategyProvider
16+
*/
17+
public class ReactiveSqmMultiTableMutationStrategyProviderInitiator
18+
implements StandardServiceInitiator<SqmMultiTableMutationStrategyProvider> {
19+
/**
20+
* Singleton access
21+
*/
22+
public static final ReactiveSqmMultiTableMutationStrategyProviderInitiator INSTANCE = new ReactiveSqmMultiTableMutationStrategyProviderInitiator();
23+
24+
@Override
25+
public SqmMultiTableMutationStrategyProvider initiateService(
26+
Map<String, Object> configurationValues,
27+
ServiceRegistryImplementor registry) {
28+
return new ReactiveSqmMultiTableMutationStrategyProvider();
29+
}
30+
31+
@Override
32+
public Class<SqmMultiTableMutationStrategyProvider> getServiceInitiated() {
33+
return SqmMultiTableMutationStrategyProvider.class;
34+
}
35+
}

0 commit comments

Comments
 (0)