You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/01/21 02:11:46 UTC
(grails-core) 20/25: update progress
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 <bo...@users.noreply.github.com>
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();