Skip to content

Commit b09b27c

Browse files
gavinkingsebersole
authored andcommitted
HHH-18625 - Add Configurable#create(GeneratorCreationContext)
https://hibernate.atlassian.net/browse/HHH-18625
1 parent a1d0b82 commit b09b27c

File tree

7 files changed

+79
-17
lines changed

7 files changed

+79
-17
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/internal/GeneratorBinder.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -529,14 +529,20 @@ private static void checkVersionGenerationAlways(XProperty property, Generator g
529529

530530
private static void callConfigure(GeneratorCreationContext creationContext, Generator generator) {
531531
if ( generator instanceof Configurable ) {
532+
final Configurable configurable = (Configurable) generator;
532533
final Value value = creationContext.getProperty().getValue();
533-
( (Configurable) generator ).configure( value.getType(), collectParameters(
534-
(SimpleValue) value,
535-
creationContext.getDatabase().getDialect(),
536-
creationContext.getDefaultCatalog(),
537-
creationContext.getDefaultSchema(),
538-
creationContext.getPersistentClass().getRootClass()
539-
), creationContext.getServiceRegistry() );
534+
configurable.create( creationContext );
535+
configurable.configure(
536+
value.getType(),
537+
collectParameters(
538+
(SimpleValue) value,
539+
creationContext.getDatabase().getDialect(),
540+
creationContext.getDefaultCatalog(),
541+
creationContext.getDefaultSchema(),
542+
creationContext.getPersistentClass().getRootClass()
543+
),
544+
creationContext.getServiceRegistry()
545+
);
540546
}
541547
}
542548

hibernate-core/src/main/java/org/hibernate/boot/model/naming/ObjectNameNormalizer.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,7 @@ protected Database database() {
4242
}
4343

4444
public Identifier normalizeIdentifierQuoting(Identifier identifier) {
45-
return getBuildingContext().getMetadataCollector()
46-
.getDatabase()
47-
.getJdbcEnvironment()
48-
.getIdentifierHelper()
45+
return database().getJdbcEnvironment().getIdentifierHelper()
4946
.normalizeQuoting( identifier );
5047
}
5148

hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.hibernate.dialect.Dialect;
2020
import org.hibernate.engine.config.spi.ConfigurationService;
2121
import org.hibernate.engine.jdbc.batch.spi.BatchBuilder;
22-
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
2322
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
2423
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
2524
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;

hibernate-core/src/main/java/org/hibernate/id/Configurable.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hibernate.MappingException;
1212
import org.hibernate.boot.model.relational.Database;
1313
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
14+
import org.hibernate.generator.GeneratorCreationContext;
1415
import org.hibernate.service.ServiceRegistry;
1516
import org.hibernate.type.Type;
1617

@@ -21,6 +22,14 @@
2122
* @author Steve Ebersole
2223
*/
2324
public interface Configurable {
25+
/**
26+
* Called before {@link #configure(Type, Properties, ServiceRegistry)},
27+
* with an instance of {@link GeneratorCreationContext}.
28+
*
29+
* @since 6.6
30+
*/
31+
default void create(GeneratorCreationContext creationContext) throws MappingException {}
32+
2433
/**
2534
* Configure this instance, given the value of parameters
2635
* specified by the user as XML {@code <param>} elements and

hibernate-core/src/main/java/org/hibernate/id/factory/IdentifierGeneratorFactory.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import java.util.Properties;
1010

1111
import org.hibernate.Incubating;
12-
import org.hibernate.dialect.Dialect;
12+
import org.hibernate.generator.GeneratorCreationContext;
1313
import org.hibernate.id.IdentifierGenerator;
1414
import org.hibernate.id.factory.spi.GeneratorDefinitionResolver;
1515
import org.hibernate.service.Service;
@@ -71,5 +71,21 @@ Generator createIdentifierGenerator(
7171
* @deprecated use {@link #createIdentifierGenerator(GenerationType, String, String, JavaType, Properties, GeneratorDefinitionResolver)}
7272
*/
7373
@Deprecated(since = "6.0")
74-
Generator createIdentifierGenerator(String strategy, Type type, Properties parameters);
74+
Generator createIdentifierGenerator(String strategy, Type type, GeneratorCreationContext creationContext, Properties parameters);
75+
76+
/**
77+
* Given a strategy, retrieve the appropriate identifier generator instance.
78+
*
79+
* @param strategy The generation strategy.
80+
* @param type The mapping type for the identifier values.
81+
* @param parameters Any parameters properties given in the generator mapping.
82+
*
83+
* @return The appropriate generator instance.
84+
*
85+
* @deprecated use {@link #createIdentifierGenerator(GenerationType, String, String, JavaType, Properties, GeneratorDefinitionResolver)}
86+
*/
87+
@Deprecated(since = "6.0")
88+
default Generator createIdentifierGenerator(String strategy, Type type, Properties parameters) {
89+
return createIdentifierGenerator( strategy, type, null, parameters );
90+
}
7591
}

hibernate-core/src/main/java/org/hibernate/id/factory/internal/IdentifierGeneratorUtil.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,26 @@
66
*/
77
package org.hibernate.id.factory.internal;
88

9+
import org.hibernate.boot.model.relational.Database;
910
import org.hibernate.cfg.AvailableSettings;
1011
import org.hibernate.dialect.Dialect;
1112
import org.hibernate.engine.config.spi.ConfigurationService;
1213
import org.hibernate.engine.config.spi.StandardConverters;
14+
import org.hibernate.generator.GeneratorCreationContext;
1315
import org.hibernate.id.IdentifierGenerator;
1416
import org.hibernate.id.OptimizableGenerator;
1517
import org.hibernate.id.PersistentIdentifierGenerator;
1618
import org.hibernate.id.enhanced.LegacyNamingStrategy;
1719
import org.hibernate.id.enhanced.SingleNamingStrategy;
1820
import org.hibernate.id.factory.IdentifierGeneratorFactory;
1921
import org.hibernate.mapping.Column;
22+
import org.hibernate.mapping.PersistentClass;
23+
import org.hibernate.mapping.Property;
2024
import org.hibernate.mapping.RootClass;
2125
import org.hibernate.mapping.SimpleValue;
2226
import org.hibernate.mapping.Table;
2327
import org.hibernate.generator.Generator;
28+
import org.hibernate.service.ServiceRegistry;
2429

2530
import java.util.Map;
2631
import java.util.Properties;
@@ -37,6 +42,32 @@ public static Generator createLegacyIdentifierGenerator(
3742
return identifierGeneratorFactory.createIdentifierGenerator(
3843
simpleValue.getIdentifierGeneratorStrategy(),
3944
simpleValue.getType(),
45+
new GeneratorCreationContext() {
46+
@Override
47+
public Database getDatabase() {
48+
return simpleValue.getMetadata().getDatabase();
49+
}
50+
@Override
51+
public ServiceRegistry getServiceRegistry() {
52+
return simpleValue.getServiceRegistry();
53+
}
54+
@Override
55+
public String getDefaultCatalog() {
56+
return null;
57+
}
58+
@Override
59+
public String getDefaultSchema() {
60+
return null;
61+
}
62+
@Override
63+
public PersistentClass getPersistentClass() {
64+
return rootClass;
65+
}
66+
@Override
67+
public Property getProperty() {
68+
return rootClass.getIdentifierProperty();
69+
}
70+
},
4071
collectParameters( simpleValue, dialect, defaultCatalog, defaultSchema, rootClass )
4172
);
4273
}
@@ -48,7 +79,7 @@ public static Properties collectParameters(
4879
String defaultSchema,
4980
RootClass rootClass) {
5081
final ConfigurationService configService =
51-
simpleValue.getMetadata().getMetadataBuildingOptions().getServiceRegistry()
82+
simpleValue.getServiceRegistry()
5283
.requireService( ConfigurationService.class );
5384

5485
final Properties params = new Properties();

hibernate-core/src/main/java/org/hibernate/id/factory/internal/StandardIdentifierGeneratorFactory.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.hibernate.engine.config.spi.ConfigurationService;
2020
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
2121
import org.hibernate.generator.Generator;
22+
import org.hibernate.generator.GeneratorCreationContext;
2223
import org.hibernate.id.Assigned;
2324
import org.hibernate.id.Configurable;
2425
import org.hibernate.id.ForeignGenerator;
@@ -206,7 +207,8 @@ private Dialect getDialect() {
206207
}
207208

208209
@Override @Deprecated
209-
public Generator createIdentifierGenerator(String strategy, Type type, Properties parameters) {
210+
public Generator createIdentifierGenerator(
211+
String strategy, Type type, GeneratorCreationContext creationContext, Properties parameters) {
210212
try {
211213
final Class<? extends Generator> clazz = getIdentifierGeneratorClass( strategy );
212214
final Generator identifierGenerator;
@@ -222,7 +224,9 @@ public Generator createIdentifierGenerator(String strategy, Type type, Propertie
222224
}
223225

224226
if ( identifierGenerator instanceof Configurable ) {
225-
( (Configurable) identifierGenerator ).configure( type, parameters, serviceRegistry );
227+
final Configurable configurable = (Configurable) identifierGenerator;
228+
configurable.create( creationContext );
229+
configurable.configure( type, parameters, serviceRegistry );
226230
}
227231
return identifierGenerator;
228232
}

0 commit comments

Comments
 (0)