This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 1b0313ea8907f04cef8a06a80d8267d87caa4d2b Author: Walter B Duque de Estrada <[email protected]> AuthorDate: Sun Jan 25 01:31:42 2026 -0600 Fix HibernateGormInstanceApiSpec and isolate broken IncrementGenerator in hibernate 7 module --- .../cfg/domainbinding/BasicValueIdCreator.java | 25 ++++++---------- .../cfg/domainbinding/GrailsIdentityGenerator.java | 2 +- .../domainbinding/IncrementGeneratorSpec.groovy | 34 ++++++++++++++++++++++ .../domainbinding/SequenceGeneratorsSpec.groovy | 27 ++--------------- 4 files changed, 46 insertions(+), 42 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreator.java index 14606df5dd..e1d7ffc549 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreator.java @@ -66,25 +66,18 @@ public class BasicValueIdCreator { public BasicValue getBasicValueId(RootClass entity, Identity mappedId, boolean useSequence) { // create a BasicValue for the specific entity table (do not reuse the prototype directly because table differs) String generatorName = determineGeneratorName(mappedId, useSequence); - final String entityName = entity.getEntityName(); - - id.setCustomIdGeneratorCreator(context -> { - // Ensure the ID object knows which entity it belongs to - if (mappedId != null && mappedId.getName() == null) { - mappedId.setName(entityName); - } - Generator generator = generatorFactories.getOrDefault(generatorName, (ctx, mid) -> new GrailsNativeGenerator(ctx)) - .apply(context, mappedId); - System.out.println("GENERATOR: name=" + generatorName + ", type=" + generator.getClass().getName()); - if (generator instanceof org.hibernate.id.IdentifierGenerator identifierGenerator) { - identifierGenerator.initialize(context.getSqlStringGenerationContext()); - } - return generator; - }); - + if (mappedId != null && mappedId.getName() == null) { + mappedId.setName(entity.getEntityName()); + } + id.setCustomIdGeneratorCreator(context -> createGenerator(mappedId, context, generatorName)); return id; } + private Generator createGenerator(Identity mappedId, GeneratorCreationContext context, String generatorName) { + return generatorFactories.getOrDefault(generatorName, (ctx, mid) -> new GrailsNativeGenerator(ctx)) + .apply(context, mappedId); + } + private String determineGeneratorName(Identity mappedId, boolean useSequence) { return Optional.ofNullable(mappedId) .map(Identity::getGenerator) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIdentityGenerator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIdentityGenerator.java index 4092beb072..9169300fb9 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIdentityGenerator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIdentityGenerator.java @@ -10,7 +10,7 @@ import org.grails.orm.hibernate.cfg.Identity; public class GrailsIdentityGenerator extends IdentityGenerator { - public GrailsIdentityGenerator(GeneratorCreationContext context, org.grails.orm.hibernate.cfg.Identity mappedId) { + public GrailsIdentityGenerator(GeneratorCreationContext context, Identity mappedId) { var generatorProps = Optional.ofNullable(mappedId).map(Identity::getProperties).orElse(new Properties()); super.configure(context, generatorProps); context.getProperty().getValue().getColumns().get(0).setIdentity(true); diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IncrementGeneratorSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IncrementGeneratorSpec.groovy new file mode 100644 index 0000000000..4e6e05d71b --- /dev/null +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IncrementGeneratorSpec.groovy @@ -0,0 +1,34 @@ +package org.grails.orm.hibernate.cfg.domainbinding + +import grails.gorm.annotation.Entity +import grails.gorm.specs.HibernateGormDatastoreSpec +import grails.gorm.transactions.Rollback + +class IncrementGeneratorSpec extends HibernateGormDatastoreSpec { + + void setupSpec() { + manager.addAllDomainClasses([EntityWithIncrement]) + } + + @Rollback + //TODO Still broken + void "test increment generator"() { + when: + def entity1 = new EntityWithIncrement(name: "test1").save(flush: true) + def entity2 = new EntityWithIncrement(name: "test2").save(flush: true) + + then: + entity1.id != null + entity2.id != null + entity2.id > entity1.id + } +} + +@Entity +class EntityWithIncrement { + Long id + String name + static mapping = { + id generator: 'increment' + } +} diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy index 80182e86b4..3905c30159 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy @@ -13,8 +13,7 @@ class SequenceGeneratorsSpec extends HibernateGormDatastoreSpec { EntityWithSequence, EntityWithTable, EntityWithUUID, - EntityWithAssigned, - EntityWithIncrement]) + EntityWithAssigned]) } @@ -72,19 +71,6 @@ class SequenceGeneratorsSpec extends HibernateGormDatastoreSpec { then: entity.id == 123 } - - @Rollback - //TODO Still broken - void "test increment generator"() { - when: - def entity1 = new EntityWithIncrement(name: "test1").save(flush: true) - def entity2 = new EntityWithIncrement(name: "test2").save(flush: true) - - then: - entity1.id != null - entity2.id != null - entity2.id > entity1.id - } } @Entity @@ -139,13 +125,4 @@ class EntityWithAssigned { static mapping = { id generator: 'assigned' } -} - -@Entity -class EntityWithIncrement { - Long id - String name - static mapping = { - id generator: 'increment' - } -} +} \ No newline at end of file
