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 b53653b76dfe42c4efdce68717a637e188cc2bd4
Author: Walter B Duque de Estrada <[email protected]>
AuthorDate: Mon Jan 19 13:33:41 2026 -0600

    update progress
---
 .../core/HIBERNATE7-UPGRADE-PROGRESS.md            | 18 +++++++++
 .../cfg/domainbinding/BasicValueIdCreator.java     |  2 +-
 .../GrailsSequenceStyleGenerator.java              | 46 ++++++++++++++++++++--
 .../cfg/domainbinding/GrailsTableGenerator.java    |  1 +
 4 files changed, 62 insertions(+), 5 deletions(-)

diff --git a/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md 
b/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md
index 3ea6688c16..f5129c8544 100644
--- a/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md
+++ b/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md
@@ -7,6 +7,12 @@ This document summarizes the approaches taken, challenges 
encountered, and futur
 
 
 
+## Hibernate 7 Key Constraints & Best Practices
+
+### Identifier Generators
+- **Avoid Deprecated `configure`:** Do **not** use the three-parameter 
`configure(Type, Properties, ServiceRegistry)` method in `IdentifierGenerator` 
(or its subclasses like `SequenceStyleGenerator`). It is marked for removal in 
Hibernate 7.
+- **Prefer modern initialization:** Use the `GeneratorCreationContext` 
provided by `setCustomIdGeneratorCreator` to perform initialization. If a 
manual call to `configure` is absolutely necessary for legacy bridge logic, be 
aware it may trigger warnings or fail in future versions.
+
 ## Challenges & Failures
 
 ### 1. Proxy Initialization Behavior
@@ -48,6 +54,18 @@ Each new binder should follow this structure:
     }
 ```
 
+#### GrailsSequenceStyleGenerator Implementation
+```java
+public class GrailsSequenceStyleGenerator extends SequenceStyleGenerator {
+    public GrailsSequenceStyleGenerator(GeneratorCreationContext context, 
org.grails.orm.hibernate.cfg.Identity mappedId) {
+        var generatorProps = 
Optional.ofNullable(mappedId).map(Identity::getProperties).orElse(new 
Properties());
+        // Use 2-parameter configure from IdentifierGenerator / 
SequenceStyleGenerator
+        super.configure(context, generatorProps);
+        this.registerExportables(context.getDatabase());
+    }
+}
+```
+
 #### Test Status (`SequenceGeneratorsSpec`)
 | Generator | Status | Error (if FAILED) |
 | :--- | :--- | :--- |
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 5a64305d04..96ac812532 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
@@ -46,7 +46,7 @@ public class BasicValueIdCreator {
     private void initializeGeneratorFactories() {
         generatorFactories.put("identity", (context, mappedId) -> new 
GrailsIdentityGenerator(context, mappedId));
 
-        BiFunction<GeneratorCreationContext, Identity, Generator> 
sequenceFactory = (context, mappedId) -> new 
GrailsSequenceStyleGenerator(context, mappedId);
+        BiFunction<GeneratorCreationContext, Identity, Generator> 
sequenceFactory = (context, mappedId) -> new 
GrailsSequenceStyleGenerator(context, mappedId, jdbcEnvironment);
         generatorFactories.put("sequence", sequenceFactory);
         generatorFactories.put("sequence-identity", sequenceFactory);
 
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 387095b5ca..5281f8b3c4 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,17 +1,55 @@
 package org.grails.orm.hibernate.cfg.domainbinding;
 
+import org.hibernate.boot.model.relational.SqlStringGenerationContext;
+import 
org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.generator.GeneratorCreationContext;
 import org.hibernate.id.enhanced.SequenceStyleGenerator;
+import org.grails.orm.hibernate.cfg.Identity;
 
 import java.util.Optional;
 import java.util.Properties;
 
-import org.grails.orm.hibernate.cfg.Identity;
-
 public class GrailsSequenceStyleGenerator extends SequenceStyleGenerator {
 
-    public GrailsSequenceStyleGenerator(GeneratorCreationContext context, 
org.grails.orm.hibernate.cfg.Identity mappedId) {
-        var generatorProps = 
Optional.ofNullable(mappedId).map(Identity::getProperties).orElse(new 
Properties());
+    public GrailsSequenceStyleGenerator(GeneratorCreationContext context, 
Identity mappedId, JdbcEnvironment jdbcEnvironment) {
+        Properties generatorProps = Optional.ofNullable(mappedId)
+                .map(Identity::getProperties)
+                .orElse(new Properties());
+
+        generatorProps.putIfAbsent(INCREMENT_PARAM, "50");
+        generatorProps.putIfAbsent(OPT_PARAM, "pooled-lo");
+
         super.configure(context, generatorProps);
+
+        if (jdbcEnvironment != null) {
+            var database = context.getDatabase();
+            this.registerExportables(database);
+
+            var physicalName = 
database.getDefaultNamespace().getPhysicalName();
+
+            String catalog = (physicalName.catalog() != null)
+                    ? physicalName.catalog().getCanonicalName()
+                    : null;
+
+            String schema = (physicalName.schema() != null)
+                    ? physicalName.schema().getCanonicalName()
+                    : null;
+
+            if (getDatabaseStructure() != null) {
+                SqlStringGenerationContext sqlContext = 
SqlStringGenerationContextImpl.fromExplicit(
+                        jdbcEnvironment,
+                        database,
+                        catalog,
+                        schema
+                );
+                this.initialize(sqlContext);
+            }
+        }
+    }
+
+    @Override
+    public void initialize(SqlStringGenerationContext context) {
+        super.initialize(context);
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsTableGenerator.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsTableGenerator.java
index c8703468b6..42cc4ebbb8 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsTableGenerator.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsTableGenerator.java
@@ -40,6 +40,7 @@ public class GrailsTableGenerator extends TableGenerator {
         // Fixes the "SQL to format should not be null" error
         this.configure(context, generatorProps);
         var database = context.getDatabase();
+        
         this.registerExportables(database);
         // Get the Name record from the physical name
         var physicalName = database.getDefaultNamespace().getPhysicalName();

Reply via email to