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 28448e5f5495ddd779e668bd654497a1870aa76b
Author: Walter B Duque de Estrada <[email protected]>
AuthorDate: Sat Jan 17 18:10:55 2026 -0600

    update progress
---
 .../orm/hibernate/cfg/HibernateMappingContext.java |   5 +-
 .../org/grails/orm/hibernate/cfg/Identity.groovy   |   8 ++
 .../cfg/domainbinding/BasicValueIdCreator.java     |   2 +-
 .../cfg/domainbinding/GrailsIdentityGenerator.java |  10 +-
 .../GrailsSequenceStyleGenerator.java              |  22 +--
 .../CompositeIdWithManyToOneAndSequenceSpec.groovy |   2 +-
 .../domainbinding/SequenceGeneratorsSpec.groovy    | 150 +++++++++++++++++++++
 7 files changed, 177 insertions(+), 22 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
index 99da87af2a..5e6727b4fd 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
@@ -260,7 +260,10 @@ public class HibernateMappingContext extends 
AbstractMappingContext {
                     try {
                         resolvedGenerator = 
ValueGenerator.valueOf(generatorName.toUpperCase(java.util.Locale.ENGLISH));
                     } catch (IllegalArgumentException e) {
-                        if(ClassUtils.isPresent(generatorName)) {
+                        if(generatorName.equalsIgnoreCase("table")) {
+                            resolvedGenerator = ValueGenerator.CUSTOM;
+                        }
+                        else if(ClassUtils.isPresent(generatorName)) {
                             resolvedGenerator = ValueGenerator.CUSTOM;
                         }
                         else {
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/Identity.groovy
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/Identity.groovy
index ed37842ed3..93483033a0 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/Identity.groovy
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/Identity.groovy
@@ -105,4 +105,12 @@ class Identity extends Property {
         config.call()
         return property
     }
+
+    Properties getProperties() {
+        new Properties().tap {
+            getParams()?.each { k, v ->
+                setProperty(k.toString(), v.toString())
+            }
+        }
+    }
 }
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 93ea18b5f9..9a8516f9eb 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
@@ -35,7 +35,7 @@ public class BasicValueIdCreator {
     }
 
     private void initializeGeneratorFactories() {
-        generatorFactories.put("identity", (context, mappedId) -> new 
GrailsIdentityGenerator(context));
+        generatorFactories.put("identity", (context, mappedId) -> new 
GrailsIdentityGenerator(context, mappedId));
 
         BiFunction<GeneratorCreationContext, Identity, Generator> 
sequenceFactory = (context, mappedId) -> new 
GrailsSequenceStyleGenerator(context, mappedId);
         generatorFactories.put("sequence", sequenceFactory);
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 88a3cd641a..4092beb072 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
@@ -3,10 +3,16 @@ package org.grails.orm.hibernate.cfg.domainbinding;
 import org.hibernate.generator.GeneratorCreationContext;
 import org.hibernate.id.IdentityGenerator;
 
+import java.util.Optional;
+import java.util.Properties;
+
+import org.grails.orm.hibernate.cfg.Identity;
+
 public class GrailsIdentityGenerator extends IdentityGenerator {
 
-    public GrailsIdentityGenerator(GeneratorCreationContext context) {
-        super();
+    public GrailsIdentityGenerator(GeneratorCreationContext context, 
org.grails.orm.hibernate.cfg.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/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsSequenceStyleGenerator.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsSequenceStyleGenerator.java
index 881ce152a6..387095b5ca 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsSequenceStyleGenerator.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsSequenceStyleGenerator.java
@@ -1,29 +1,17 @@
 package org.grails.orm.hibernate.cfg.domainbinding;
 
-import org.hibernate.MappingException;
-import org.hibernate.boot.model.relational.Database;
-import org.hibernate.dialect.Dialect;
-import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.generator.GeneratorCreationContext;
 import org.hibernate.id.enhanced.SequenceStyleGenerator;
-import org.hibernate.service.ServiceRegistry;
-import org.hibernate.type.Type;
 
-import java.util.Map;
+import java.util.Optional;
 import java.util.Properties;
-import java.util.Set;
+
+import org.grails.orm.hibernate.cfg.Identity;
 
 public class GrailsSequenceStyleGenerator extends SequenceStyleGenerator {
 
     public GrailsSequenceStyleGenerator(GeneratorCreationContext context, 
org.grails.orm.hibernate.cfg.Identity mappedId) {
-        // Call super's no-arg constructor first
-        super();
-        Properties generatorProps = new Properties();
-        if (mappedId != null && mappedId.getParams() != null) {
-            for (Map.Entry entry : (Set<Map.Entry>) 
mappedId.getParams().entrySet()) {
-                generatorProps.setProperty(entry.getKey().toString(), 
entry.getValue().toString());
-            }
-        }
-        super.configure(context,generatorProps);
+        var generatorProps = 
Optional.ofNullable(mappedId).map(Identity::getProperties).orElse(new 
Properties());
+        super.configure(context, generatorProps);
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/CompositeIdWithManyToOneAndSequenceSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/CompositeIdWithManyToOneAndSequenceSpec.groovy
index e7aa38c387..b1ac93eb34 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/CompositeIdWithManyToOneAndSequenceSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/CompositeIdWithManyToOneAndSequenceSpec.groovy
@@ -68,7 +68,7 @@ class Tooth {
 
     static mapping = {
         table name: 'AK_TOOTH'
-        id generator: 'sequence', params: [sequence: 'SEQ_AK_TOOTH']
+        id generator: 'native', params: [sequence_name: 'SEQ_AK_TOOTH']
     }
 }
 
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
new file mode 100644
index 0000000000..6e781b96e5
--- /dev/null
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy
@@ -0,0 +1,150 @@
+package org.grails.orm.hibernate.cfg.domainbinding
+
+import grails.gorm.annotation.Entity
+import grails.gorm.specs.HibernateGormDatastoreSpec
+import grails.gorm.transactions.Rollback
+import spock.lang.Unroll
+
+class SequenceGeneratorsSpec extends HibernateGormDatastoreSpec {
+
+    void setupSpec() {
+        manager.addAllDomainClasses([EntityWithIdentity,
+                                     EntityWithNative,
+                                     EntityWithSequence,
+                                     EntityWithTable,
+                                     EntityWithUUID,
+                                     EntityWithAssigned,
+                                     EntityWithIncrement])
+    }
+
+
+    @Rollback
+    void "test identity generator"() {
+        when:
+        def entity = new EntityWithIdentity(name: "test").save(flush: true)
+
+        then:
+        entity.id != null
+    }
+
+    @Rollback
+    void "test native generator"() {
+        when:
+        def entity = new EntityWithNative(name: "test").save(flush: true)
+
+        then:
+        entity.id != null
+    }
+
+    @Rollback
+    void "test sequence generator"() {
+        when:
+        def entity = new EntityWithSequence(name: "test").save(flush: true)
+
+        then:
+        entity.id != null
+    }
+
+    @Rollback
+    void "test table generator"() {
+        when:
+        def entity = new EntityWithTable(name: "test").save(flush: true)
+
+        then:
+        entity.id != null
+    }
+
+    @Rollback
+    void "test uuid generator"() {
+        when:
+        def entity = new EntityWithUUID(name: "test").save(flush: true)
+
+        then:
+        entity.id != null
+        entity.id instanceof String
+    }
+
+    @Rollback
+    void "test assigned generator"() {
+        when:
+        def entity = new EntityWithAssigned(id: 123, name: "test").save(flush: 
true)
+
+        then:
+        entity.id == 123
+    }
+
+    @Rollback
+    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 EntityWithIdentity {
+    Long id
+    String name
+    static mapping = {
+        id generator: 'identity'
+    }
+}
+
+@Entity
+class EntityWithNative {
+    Long id
+    String name
+    static mapping = {
+        id generator: 'native'
+    }
+}
+
+@Entity
+class EntityWithSequence {
+    Long id
+    String name
+    static mapping = {
+        id generator: 'sequence', params: [sequence_name: 'seq_test']
+    }
+}
+
+@Entity
+class EntityWithTable {
+    Long id
+    String name
+    static mapping = {
+        id generator: 'table'
+    }
+}
+
+@Entity
+class EntityWithUUID {
+    String id
+    String name
+    static mapping = {
+        id generator: 'uuid'
+    }
+}
+
+@Entity
+class EntityWithAssigned {
+    Long id
+    String name
+    static mapping = {
+        id generator: 'assigned'
+    }
+}
+
+@Entity
+class EntityWithIncrement {
+    Long id
+    String name
+    static mapping = {
+        id generator: 'increment'
+    }
+}

Reply via email to