Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
import org.hibernate.jpa.internal.ExceptionMapperLegacyJpaImpl;
import org.hibernate.jpa.internal.PersistenceUnitUtilImpl;
import org.hibernate.mapping.GeneratorSettings;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.RootClass;
import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.metamodel.RepresentationMode;
Expand Down Expand Up @@ -1811,5 +1812,26 @@ public String getDefaultSchema() {
public SqlStringGenerationContext getSqlStringGenerationContext() {
return sqlStringGenerationContext;
}

@Override
public Generator getOrCreateIdGenerator(String rootName, PersistentClass persistentClass) {
final var existing = getGenerators().get( rootName );
if ( existing != null ) {
return existing;
}
else {
final var idGenerator =
persistentClass.getIdentifier()
// returns the cached Generator if it was already created
.createGenerator(
getDialect(),
persistentClass.getRootClass(),
persistentClass.getIdentifierProperty(),
getGeneratorSettings()
);
getGenerators().put( rootName, idGenerator );
return idGenerator;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.generator.Generator;
import org.hibernate.mapping.GeneratorSettings;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry;
Expand Down Expand Up @@ -65,4 +66,7 @@ default MetadataImplementor getMetadata() {
Map<String, Generator> getGenerators();

GeneratorSettings getGeneratorSettings();

// For Hibernate Reactive
Generator getOrCreateIdGenerator(String rootName, PersistentClass persistentClass);
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public EntityMetamodel(
PersistentClass persistentClass,
RuntimeModelCreationContext creationContext) {
this( persistentClass, creationContext,
rootName -> buildIdGenerator( rootName, persistentClass, creationContext ) );
rootName -> creationContext.getOrCreateIdGenerator( rootName, persistentClass ) );
}

/*
Expand Down Expand Up @@ -575,26 +575,6 @@ private static boolean writePropertyValue(OnExecutionGenerator generator) {
return writePropertyValue;
}

private static Generator buildIdGenerator(String rootName, PersistentClass persistentClass, RuntimeModelCreationContext creationContext) {
final var existing = creationContext.getGenerators().get( rootName );
if ( existing != null ) {
return existing;
}
else {
final var idGenerator =
persistentClass.getIdentifier()
// returns the cached Generator if it was already created
.createGenerator(
creationContext.getDialect(),
persistentClass.getRootClass(),
persistentClass.getIdentifierProperty(),
creationContext.getGeneratorSettings()
);
creationContext.getGenerators().put( rootName, idGenerator );
return idGenerator;
}
}

private void verifyNaturalIdProperty(Property property) {
final var value = property.getValue();
if ( value instanceof ManyToOne toOne ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.generator.Generator;
import org.hibernate.mapping.GeneratorSettings;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
Expand Down Expand Up @@ -209,5 +210,10 @@ public String getDefaultSchema() {
public GeneratorSettings getGeneratorSettings() {
return this;
}

@Override
public Generator getOrCreateIdGenerator(String rootName, PersistentClass persistentClass) {
return null;
}
}
}
Loading