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 bc054e938afc9a40d4d746255fdc533d6dfa3fea Author: Walter B Duque de Estrada <[email protected]> AuthorDate: Thu Jan 29 22:01:55 2026 -0600 progress --- .../domainbinding/GrailsIncrementGenerator.java | 4 +- .../generator/GrailsSequenceGeneratorEnum.java | 94 ++++++++++++++++++++++ .../generator/GrailsSequenceWrapper.java | 23 ++++++ 3 files changed, 119 insertions(+), 2 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIncrementGenerator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIncrementGenerator.java index 1fd05fb5c8..280a9c47ef 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIncrementGenerator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsIncrementGenerator.java @@ -2,7 +2,7 @@ package org.grails.orm.hibernate.cfg.domainbinding; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.Identity; -import org.hibernate.boot.model.relational.Database; + import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.SharedSessionContractImplementor; @@ -39,7 +39,7 @@ public class GrailsIncrementGenerator extends IncrementGenerator { private String resolvedColumnName; private Class<?> resolvedReturnClass; - public GrailsIncrementGenerator(GeneratorCreationContext context, Identity mappedId, JdbcEnvironment jdbcEnvironment, GrailsHibernatePersistentEntity domainClass) { + public GrailsIncrementGenerator(GeneratorCreationContext context, Identity mappedId, GrailsHibernatePersistentEntity domainClass) { Properties params = new Properties(); if (mappedId != null && mappedId.getProperties() != null) { params.putAll(mappedId.getProperties()); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceGeneratorEnum.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceGeneratorEnum.java new file mode 100644 index 0000000000..aa6df75fd9 --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceGeneratorEnum.java @@ -0,0 +1,94 @@ +package org.grails.orm.hibernate.cfg.domainbinding.generator; + +import java.util.Arrays; +import java.util.Optional; + +import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; +import org.hibernate.generator.Assigned; +import org.hibernate.generator.Generator; +import org.hibernate.generator.GeneratorCreationContext; +import org.hibernate.id.uuid.UuidGenerator; + +import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; +import org.grails.orm.hibernate.cfg.Identity; +import org.grails.orm.hibernate.cfg.domainbinding.GrailsIdentityGenerator; +import org.grails.orm.hibernate.cfg.domainbinding.GrailsIncrementGenerator; +import org.grails.orm.hibernate.cfg.domainbinding.GrailsNativeGenerator; +import org.grails.orm.hibernate.cfg.domainbinding.GrailsSequenceStyleGenerator; +import org.grails.orm.hibernate.cfg.domainbinding.GrailsTableGenerator; + +/** + * Enum for Grails ID generator strategies. + */ +public enum GrailsSequenceGeneratorEnum { + IDENTITY("identity"), + SEQUENCE("sequence"), + SEQUENCE_IDENTITY("sequence-identity"), + INCREMENT("increment"), + UUID("uuid"), + UUID2("uuid2"), + ASSIGNED("assigned"), + TABLE("table"), + ENHANCED_TABLE("enhanced-table"), + HILO("hilo"), + NATIVE("native"); + + private final String name; + + GrailsSequenceGeneratorEnum(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } + + public static Optional<GrailsSequenceGeneratorEnum> fromName(String name) { + return Arrays.stream(values()) + .filter(e -> e.name.equals(name)) + .findFirst(); + } + + public static Generator getGenerator( + String name, + GeneratorCreationContext context, + Identity mappedId, + GrailsHibernatePersistentEntity domainClass, + JdbcEnvironment jdbcEnvironment) { + return getGenerator(fromName(name).orElse(NATIVE), context, mappedId, domainClass, jdbcEnvironment); + } + + public static Generator getGenerator( + GrailsSequenceGeneratorEnum sequenceGeneratorEnum, + GeneratorCreationContext context, + Identity mappedId, + GrailsHibernatePersistentEntity domainClass, + JdbcEnvironment jdbcEnvironment) { + switch (sequenceGeneratorEnum) { + case IDENTITY: + return new GrailsIdentityGenerator(context, mappedId); + case SEQUENCE: + case SEQUENCE_IDENTITY: + case HILO: + return new GrailsSequenceStyleGenerator(context, mappedId, jdbcEnvironment); + case INCREMENT: + return new GrailsIncrementGenerator(context, mappedId, domainClass); + case UUID: + case UUID2: + return new UuidGenerator(context.getType().getReturnedClass()); + case ASSIGNED: + return new Assigned(); + case TABLE: + case ENHANCED_TABLE: + return new GrailsTableGenerator(context, mappedId, jdbcEnvironment); + case NATIVE: + default: + return new GrailsNativeGenerator(context); + } + } +} diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceWrapper.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceWrapper.java new file mode 100644 index 0000000000..7b983c2b5e --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/generator/GrailsSequenceWrapper.java @@ -0,0 +1,23 @@ +package org.grails.orm.hibernate.cfg.domainbinding.generator; + +import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; +import org.hibernate.generator.Generator; +import org.hibernate.generator.GeneratorCreationContext; + +import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; +import org.grails.orm.hibernate.cfg.Identity; + +import static org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceGeneratorEnum.NATIVE; +import static org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceGeneratorEnum.fromName; + +public class GrailsSequenceWrapper { + + public Generator getGenerator( + String name, + GeneratorCreationContext context, + Identity mappedId, + GrailsHibernatePersistentEntity domainClass, + JdbcEnvironment jdbcEnvironment) { + return GrailsSequenceGeneratorEnum.getGenerator(fromName(name).orElse(NATIVE), context, mappedId, domainClass, jdbcEnvironment); + } +}
