Skip to content

Commit 88bcc71

Browse files
mbelladesebersole
authored andcommitted
HHH-18337 Account for physical naming strategy when querying db sequence
1 parent 7c66788 commit 88bcc71

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
import org.hibernate.boot.spi.MetadataBuildingContext;
5555
import org.hibernate.boot.spi.PropertyData;
5656
import org.hibernate.engine.OptimisticLockStyle;
57+
import org.hibernate.id.IdentifierGenerator;
58+
import org.hibernate.id.PersistentIdentifierGenerator;
5759
import org.hibernate.internal.CoreMessageLogger;
5860
import org.hibernate.mapping.Collection;
5961
import org.hibernate.mapping.Component;
@@ -1441,6 +1443,14 @@ static void processId(
14411443
? serviceRegistry.requireService( ManagedBeanRegistry.class ).getBeanContainer()
14421444
: null;
14431445
idValue.setCustomIdGeneratorCreator( identifierGeneratorCreator( idProperty, annotation, beanContainer ) );
1446+
final Map<String,Object> parameters = new HashMap<>();
1447+
parameters.put( PersistentIdentifierGenerator.TABLE, idValue.getTable().getName() );
1448+
if ( idValue.getColumnSpan() == 1 ) {
1449+
parameters.put( PersistentIdentifierGenerator.PK, idValue.getColumns().get(0).getName() );
1450+
}
1451+
// YUCK! but cannot think of a clean way to do this given the string-config based scheme
1452+
parameters.put( PersistentIdentifierGenerator.IDENTIFIER_NORMALIZER, context.getObjectNameNormalizer() );
1453+
idValue.setIdentifierGeneratorParameters( parameters );
14441454
}
14451455
else if ( !generatorAnnotations.isEmpty() ) {
14461456
// idValue.setCustomGeneratorCreator( generatorCreator( idProperty, generatorAnnotation ) );

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public Identifier normalizeIdentifierQuoting(String identifierText) {
3434
return database().toIdentifier( identifierText );
3535
}
3636

37-
protected Database database() {
37+
public Database database() {
3838
if ( database == null ) {
3939
database = getBuildingContext().getMetadataCollector().getDatabase();
4040
}

hibernate-core/src/main/java/org/hibernate/id/enhanced/SequenceStyleGenerator.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.hibernate.HibernateException;
1616
import org.hibernate.MappingException;
1717
import org.hibernate.boot.model.naming.Identifier;
18+
import org.hibernate.boot.model.naming.ObjectNameNormalizer;
1819
import org.hibernate.boot.model.relational.Database;
1920
import org.hibernate.boot.model.relational.QualifiedName;
2021
import org.hibernate.boot.model.relational.QualifiedNameParser;
@@ -216,7 +217,8 @@ public void configure(Type type, Properties parameters, ServiceRegistry serviceR
216217
physicalSequence,
217218
optimizationStrategy,
218219
serviceRegistry,
219-
determineContributor( parameters )
220+
determineContributor( parameters ),
221+
(ObjectNameNormalizer) parameters.get( IDENTIFIER_NORMALIZER )
220222
);
221223

222224
if ( physicalSequence
@@ -251,7 +253,8 @@ private int adjustIncrementSize(
251253
boolean physicalSequence,
252254
OptimizerDescriptor optimizationStrategy,
253255
ServiceRegistry serviceRegistry,
254-
String contributor) {
256+
String contributor,
257+
ObjectNameNormalizer normalizer) {
255258
final ConfigurationService configurationService = serviceRegistry.requireService( ConfigurationService.class );
256259
final SequenceMismatchStrategy sequenceMismatchStrategy = configurationService.getSetting(
257260
AvailableSettings.SEQUENCE_INCREMENT_SIZE_MISMATCH_STRATEGY,
@@ -262,7 +265,10 @@ private int adjustIncrementSize(
262265
if ( sequenceMismatchStrategy != SequenceMismatchStrategy.NONE
263266
&& optimizationStrategy.isPooled()
264267
&& physicalSequence ) {
265-
final String databaseSequenceName = sequenceName.getObjectName().getText();
268+
final String databaseSequenceName = normalizer.database()
269+
.getPhysicalNamingStrategy()
270+
.toPhysicalSequenceName( sequenceName.getObjectName(), jdbcEnvironment )
271+
.getText();
266272
final Number databaseIncrementValue = isSchemaToBeRecreated( contributor, configurationService ) ? null : getSequenceIncrementValue( jdbcEnvironment, databaseSequenceName );
267273
if ( databaseIncrementValue != null && databaseIncrementValue.intValue() != incrementSize) {
268274
final int dbIncrementValue = databaseIncrementValue.intValue();

0 commit comments

Comments
 (0)