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 e7b30f938668017a54046c37694c32eb84e53b86 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Fri Feb 13 15:00:16 2026 -0600 refactored BasicValueIdCreator by removing GrailsHibernatePersistentEntity from its constructor and instead passing it as an argument to getBasicValueId, which then forwards it to createGenerator. I also updated the BasicValueIdCreator constructor to take Table as its final argument --- .../cfg/domainbinding/binder/IdentityBinder.java | 5 ----- .../cfg/domainbinding/binder/SimpleIdBinder.java | 4 ++-- .../domainbinding/util/BasicValueIdCreator.java | 10 ++++----- .../domainbinding/BasicValueIdCreatorSpec.groovy | 26 +++++++++++++--------- .../cfg/domainbinding/SimpleIdBinderSpec.groovy | 2 +- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java index 9960aa9de4..e6559afaa9 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java @@ -31,11 +31,6 @@ public class IdentityBinder { this.compositeIdBinder = compositeIdBinder; } - protected IdentityBinder() { - this.simpleIdBinder = null; - this.compositeIdBinder = null; - } - public void bindIdentity( @Nonnull GrailsHibernatePersistentEntity domainClass, RootClass root, diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java index 0dba050694..71bb2c66a2 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java @@ -51,8 +51,8 @@ public class SimpleIdBinder { boolean useSequence = result != null && result.isTablePerConcreteClass(); // create the id value - BasicValueIdCreator idCreator = this.basicValueIdCreator != null ? this.basicValueIdCreator : new BasicValueIdCreator(metadataBuildingContext, jdbcEnvironment, domainClass, entity.getTable()); - BasicValue id = idCreator.getBasicValueId(mappedId, useSequence); + BasicValueIdCreator idCreator = this.basicValueIdCreator != null ? this.basicValueIdCreator : new BasicValueIdCreator(metadataBuildingContext, jdbcEnvironment, entity.getTable()); + BasicValue id = idCreator.getBasicValueId(mappedId, domainClass, useSequence); var identifier = domainClass.getIdentity(); if (mappedId != null) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BasicValueIdCreator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BasicValueIdCreator.java index cd3604a7de..75090e6339 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BasicValueIdCreator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BasicValueIdCreator.java @@ -15,16 +15,14 @@ import org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceWrappe public class BasicValueIdCreator { private final JdbcEnvironment jdbcEnvironment; - private GrailsHibernatePersistentEntity domainClass; @SuppressWarnings("unused") // kept for tests that want to provide a prototype BasicValue private final BasicValue id; private final GrailsSequenceWrapper grailsSequenceWrapper; - public BasicValueIdCreator(MetadataBuildingContext metadataBuildingContext, JdbcEnvironment jdbcEnvironment, GrailsHibernatePersistentEntity domainClass, Table table) { + public BasicValueIdCreator(MetadataBuildingContext metadataBuildingContext, JdbcEnvironment jdbcEnvironment, Table table) { // create a prototype BasicValue (table will be set per-entity when creating the actual BasicValue) this.id = new BasicValue(metadataBuildingContext, table); this.jdbcEnvironment = jdbcEnvironment; - this.domainClass = domainClass; this.grailsSequenceWrapper = new GrailsSequenceWrapper(); } @@ -39,14 +37,14 @@ public class BasicValueIdCreator { } - public BasicValue getBasicValueId(Identity mappedId, boolean useSequence) { + public BasicValue getBasicValueId(Identity mappedId, GrailsHibernatePersistentEntity domainClass, boolean useSequence) { // create a BasicValue for the specific entity table (do not reuse the prototype directly because table differs) String generatorName = Identity.determineGeneratorName(mappedId, useSequence); - id.setCustomIdGeneratorCreator(context -> createGenerator(mappedId, context, generatorName)); + id.setCustomIdGeneratorCreator(context -> createGenerator(mappedId, domainClass, context, generatorName)); return id; } - private Generator createGenerator(Identity mappedId, GeneratorCreationContext context, String generatorName) { + private Generator createGenerator(Identity mappedId, GrailsHibernatePersistentEntity domainClass, GeneratorCreationContext context, String generatorName) { return grailsSequenceWrapper.getGenerator(generatorName, context, mappedId, domainClass, jdbcEnvironment); } } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreatorSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreatorSpec.groovy index 1271ebf097..0446618c62 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreatorSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BasicValueIdCreatorSpec.groovy @@ -3,6 +3,7 @@ package org.grails.orm.hibernate.cfg.domainbinding import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment import grails.gorm.specs.HibernateGormDatastoreSpec +import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity import org.grails.orm.hibernate.cfg.Identity import org.hibernate.boot.spi.MetadataBuildingContext import org.hibernate.generator.Generator @@ -43,16 +44,17 @@ class BasicValueIdCreatorSpec extends HibernateGormDatastoreSpec { given: Identity mappedId = new Identity() mappedId.setGenerator(generatorName) + def domainClass = Mock(GrailsHibernatePersistentEntity) def mockGenerator = Mock(Generator) def context = Mock(GeneratorCreationContext) when: - BasicValue id = creator.getBasicValueId(mappedId, useSequence) + BasicValue id = creator.getBasicValueId(mappedId, domainClass, useSequence) def generatorCreator = id.getCustomIdGeneratorCreator() Generator generator = generatorCreator.createGenerator(context) then: - 1 * grailsSequenceWrapper.getGenerator(generatorName, context, mappedId, _, jdbcEnvironment) >> mockGenerator + 1 * grailsSequenceWrapper.getGenerator(generatorName, context, mappedId, domainClass, jdbcEnvironment) >> mockGenerator generator == mockGenerator where: @@ -72,30 +74,32 @@ class BasicValueIdCreatorSpec extends HibernateGormDatastoreSpec { def "should default to native generator when mappedId is null"() { given: def mockGenerator = Mock(Generator) + def domainClass = Mock(GrailsHibernatePersistentEntity) def context = Mock(GeneratorCreationContext) when: - BasicValue id = creator.getBasicValueId(null, false) + BasicValue id = creator.getBasicValueId(null, domainClass, false) def generatorCreator = id.getCustomIdGeneratorCreator() Generator generator = generatorCreator.createGenerator(context) then: - 1 * grailsSequenceWrapper.getGenerator(GrailsSequenceGeneratorEnum.NATIVE.toString(), context, null, _, jdbcEnvironment) >> mockGenerator + 1 * grailsSequenceWrapper.getGenerator(GrailsSequenceGeneratorEnum.NATIVE.toString(), context, null, domainClass, jdbcEnvironment) >> mockGenerator generator == mockGenerator } def "should default to sequence-identity when mappedId is null and useSequence is true"() { given: def mockGenerator = Mock(Generator) + def domainClass = Mock(GrailsHibernatePersistentEntity) def context = Mock(GeneratorCreationContext) when: - BasicValue id = creator.getBasicValueId(null, true) + BasicValue id = creator.getBasicValueId(null, domainClass, true) def generatorCreator = id.getCustomIdGeneratorCreator() Generator generator = generatorCreator.createGenerator(context) then: - 1 * grailsSequenceWrapper.getGenerator(GrailsSequenceGeneratorEnum.SEQUENCE_IDENTITY.toString(), context, null, _, jdbcEnvironment) >> mockGenerator + 1 * grailsSequenceWrapper.getGenerator(GrailsSequenceGeneratorEnum.SEQUENCE_IDENTITY.toString(), context, null, domainClass, jdbcEnvironment) >> mockGenerator generator == mockGenerator } @@ -104,15 +108,16 @@ class BasicValueIdCreatorSpec extends HibernateGormDatastoreSpec { Identity mappedId = new Identity() mappedId.setGenerator(GrailsSequenceGeneratorEnum.NATIVE.toString()) def mockGenerator = Mock(Generator) + def domainClass = Mock(GrailsHibernatePersistentEntity) def context = Mock(GeneratorCreationContext) when: - BasicValue id = creator.getBasicValueId(mappedId, true) + BasicValue id = creator.getBasicValueId(mappedId, domainClass, true) def generatorCreator = id.getCustomIdGeneratorCreator() Generator generator = generatorCreator.createGenerator(context) then: - 1 * grailsSequenceWrapper.getGenerator(GrailsSequenceGeneratorEnum.SEQUENCE_IDENTITY.toString(), context, mappedId, _, jdbcEnvironment) >> mockGenerator + 1 * grailsSequenceWrapper.getGenerator(GrailsSequenceGeneratorEnum.SEQUENCE_IDENTITY.toString(), context, mappedId, domainClass, jdbcEnvironment) >> mockGenerator generator == mockGenerator } @@ -120,14 +125,15 @@ class BasicValueIdCreatorSpec extends HibernateGormDatastoreSpec { given: Identity mappedId = new Identity() mappedId.setGenerator("custom") + def domainClass = Mock(GrailsHibernatePersistentEntity) def context = Mock(GeneratorCreationContext) when: - BasicValue id = creator.getBasicValueId(mappedId, false) + BasicValue id = creator.getBasicValueId(mappedId, domainClass, false) def generatorCreator = id.getCustomIdGeneratorCreator() generatorCreator.createGenerator(context) then: - 1 * grailsSequenceWrapper.getGenerator("custom", context, mappedId, _, jdbcEnvironment) >> Mock(Generator) + 1 * grailsSequenceWrapper.getGenerator("custom", context, mappedId, domainClass, jdbcEnvironment) >> Mock(Generator) } } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy index 9880baaa67..30511a1f3c 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy @@ -35,7 +35,7 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec { // Use a Mock for BasicValueIdCreator and return a BasicValue based on the currentTable basicValueIdCreator = Mock(BasicValueIdCreator) - basicValueIdCreator.getBasicValueId(*_) >> { Identity id, boolean useSeq -> + basicValueIdCreator.getBasicValueId(_, _, _) >> { Identity id, GrailsHibernatePersistentEntity domainClass, boolean useSeq -> new BasicValue(metadataBuildingContext, currentTable) }
