Skip to content

Commit e55bdbc

Browse files
committed
HHH-18337 Avoid calling Configurable#create for null creation context
Also change a failing test so it doesn't pass `null` as creation context
1 parent 7a0bbd6 commit e55bdbc

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ public Generator createIdentifierGenerator(
225225

226226
if ( identifierGenerator instanceof Configurable ) {
227227
final Configurable configurable = (Configurable) identifierGenerator;
228-
configurable.create( creationContext );
228+
if ( creationContext != null ) {
229+
configurable.create( creationContext );
230+
}
229231
configurable.configure( type, parameters, serviceRegistry );
230232
}
231233
return identifierGenerator;

hibernate-core/src/test/java/org/hibernate/orm/test/idgen/userdefined/NativeGenerator.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
import org.hibernate.generator.BeforeExecutionGenerator;
99
import org.hibernate.generator.EventType;
1010
import org.hibernate.generator.Generator;
11+
import org.hibernate.generator.GeneratorCreationContext;
1112
import org.hibernate.generator.OnExecutionGenerator;
1213
import org.hibernate.id.Configurable;
1314
import org.hibernate.id.PostInsertIdentityPersister;
1415
import org.hibernate.id.factory.IdentifierGeneratorFactory;
1516
import org.hibernate.id.factory.spi.CustomIdGeneratorCreationContext;
1617
import org.hibernate.id.insert.InsertGeneratedIdentifierDelegate;
18+
import org.hibernate.mapping.PersistentClass;
19+
import org.hibernate.mapping.Property;
1720
import org.hibernate.service.ServiceRegistry;
1821
import org.hibernate.type.Type;
1922

@@ -26,10 +29,12 @@ public class NativeGenerator
2629

2730
private final IdentifierGeneratorFactory factory;
2831
private final String strategy;
32+
private final CustomIdGeneratorCreationContext creationContext;
2933

3034
private Generator generator;
3135

3236
public NativeGenerator(NativeId nativeId, Member member, CustomIdGeneratorCreationContext creationContext) {
37+
this.creationContext = creationContext;
3338
factory = creationContext.getIdentifierGeneratorFactory();
3439
strategy = creationContext.getDatabase().getDialect().getNativeIdentifierGeneratorStrategy();
3540
if ( "identity".equals(strategy) ) {
@@ -49,7 +54,12 @@ public boolean generatedOnExecution() {
4954

5055
@Override
5156
public void configure(Type type, Properties parameters, ServiceRegistry serviceRegistry) {
52-
generator = factory.createIdentifierGenerator(strategy, type, parameters);
57+
generator = factory.createIdentifierGenerator(
58+
strategy,
59+
type,
60+
creationContext,
61+
parameters
62+
);
5363
//TODO: should use this instead of the deprecated method, but see HHH-18135
5464
// GenerationType generationType;
5565
// switch (strategy) {

0 commit comments

Comments
 (0)