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/02/23 20:33:47 UTC
(grails-core) 07/11: added GrailsNamedStrategyContributor and changed NamingStrategyContributor
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 33ba7a40266fc3bdfdb057b1818d620702d87b9b
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Mon Feb 23 09:08:14 2026 -0600
added GrailsNamedStrategyContributor and changed NamingStrategyContributor
---
grails-data-hibernate7/DEPRECATIONS.md | 50 ----------------------
.../HIBERNATE7-GRAILS8-UPGRADE.md | 12 ------
.../cfg/GrailsNamedStrategyContributor.java | 28 ++++++++++++
.../cfg/HibernateMappingContextConfiguration.java | 13 +++---
.../domainbinding/util/NamingStrategyProvider.java | 8 ++--
....registry.selector.spi.NamedStrategyContributor | 1 +
.../NamingStrategyProviderSpec.groovy | 6 +--
7 files changed, 41 insertions(+), 77 deletions(-)
diff --git a/grails-data-hibernate7/DEPRECATIONS.md b/grails-data-hibernate7/DEPRECATIONS.md
deleted file mode 100644
index de23915818..0000000000
--- a/grails-data-hibernate7/DEPRECATIONS.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Deprecation Warnings — grails-data-hibernate7
-
-Generated from a clean build of `grails-data-hibernate7` (and its four Gradle subprojects) with `-Xlint:deprecation -Xlint:all` compiler flags. Only warnings originating from source files within this module are listed; warnings from generated stubs or upstream dependencies are excluded.
-
-> **Warning types**
-> | Code | Meaning |
-> |---|---|
-> | `[deprecation]` | Uses a `@Deprecated` API |
-> | `[removal]` | Uses an API deprecated and **marked for removal** |
-> | `[unchecked]` | Unsafe unchecked / cast operation |
-> | `[rawtypes]` | Uses a raw (un-parameterized) generic type |
-> | `[serial]` | Serializable class without `serialVersionUID` |
-
----
-
-## Warnings table
-
-| Fully Qualified Class Name | Line | Warning |
-|---|---|---|
-| `org.grails.orm.hibernate.access.TraitPropertyAccessStrategy` | 39 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.access.TraitPropertyAccessStrategy` | 117 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 39 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 52 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 60 | `[rawtypes]` found raw type: Closure |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 70 | `[rawtypes]` found raw type: MappingFactory |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 75 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 86 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 91 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContext` | 96 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 99 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 115 | `[deprecation]` DATASOURCE in JdbcSettings has been deprecated |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 130 | `[deprecation]` DATASOURCE in JdbcSettings has been deprecated |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 150 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 158 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 259 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 261 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 262 | `[unchecked]` unchecked call to isAnnotationPresent(Class<? extends Annotation>) as a member of the raw type Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 268 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 275 | `[rawtypes]` found raw type: Class |
-| `org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration` | 300 | `[removal]` \<T\>registerStrategyImplementor(Class\<T\>,String,Class\<? extends T\>) in StrategySelector has been deprecated and marked for removal |
-| `org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity` | 194 | `[rawtypes]` found raw type: PersistentProperty |
-| `org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty` | 155 | `[rawtypes]` found raw type: OneToOne |
-| `org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty` | 186 | `[rawtypes]` found raw type: OneToOne |
-| `org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher` | 51 | `[rawtypes]` found raw type: Association |
-| `org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyProvider` | 32 | `[removal]` CamelCaseToUnderscoresNamingStrategy in org.hibernate.boot.model.naming has been deprecated and marked for removal |
-| `org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyProvider` | 57 | `[removal]` CamelCaseToUnderscoresNamingStrategy in org.hibernate.boot.model.naming has been deprecated and marked for removal |
-| `org.grails.orm.hibernate.proxy.HibernateProxyHandler` | 54 | `[rawtypes]` found raw type: EntityProxy |
-| `org.grails.orm.hibernate.proxy.HibernateProxyHandler` | 76 | `[rawtypes]` found raw type: EntityProxy |
-| `org.grails.orm.hibernate.proxy.HibernateProxyHandler` | 95 | `[rawtypes]` found raw type: EntityProxy |
-| `org.grails.orm.hibernate.proxy.HibernateProxyHandler` | 126 | `[rawtypes]` found raw type: EntityProxy |
diff --git a/grails-data-hibernate7/HIBERNATE7-GRAILS8-UPGRADE.md b/grails-data-hibernate7/HIBERNATE7-GRAILS8-UPGRADE.md
index 26ceec5eeb..851e975b26 100644
--- a/grails-data-hibernate7/HIBERNATE7-GRAILS8-UPGRADE.md
+++ b/grails-data-hibernate7/HIBERNATE7-GRAILS8-UPGRADE.md
@@ -164,18 +164,6 @@ Do **not** drop Hibernate 5.6 support in 8.0.0. Ship both:
**Priority**: **P2** - SQL injection is OWASP #3. Framework should make the safe path the easy path.
**Effort**: Medium
-### 1.4 Static Compilation Coverage Expansion
-
-**Current state in grails-core/src/main**: 45 out of 73 Groovy files (62%) have `@CompileStatic` or `@GrailsCompileStatic`.
-
-Without `@CompileStatic`, every Groovy method call goes through dynamic dispatch:
-- MetaClass lookup per call
-- No JIT inlining
-- Indy call site caching defeated by metaclass changes (ties into 1.1)
-- GraalVM native image impossible for dynamically-dispatched code
-
-**Required work**:
-1. Audit all `.groovy` files in `src/main` across every module for `@CompileStatic` eligibility
### 2.6 GORM Query Safety Audit
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsNamedStrategyContributor.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsNamedStrategyContributor.java
new file mode 100644
index 0000000000..c404af4194
--- /dev/null
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsNamedStrategyContributor.java
@@ -0,0 +1,28 @@
+package org.grails.orm.hibernate.cfg;
+
+import org.checkerframework.checker.units.qual.C;
+import org.hibernate.boot.registry.selector.spi.NamedStrategyContributions;
+import org.hibernate.boot.registry.selector.spi.NamedStrategyContributor;
+import org.hibernate.id.IdentifierGenerator;
+import org.hibernate.property.access.spi.PropertyAccessStrategy;
+
+import org.grails.orm.hibernate.access.TraitPropertyAccessStrategy;
+
+public class GrailsNamedStrategyContributor implements NamedStrategyContributor {
+
+ @Override
+ public void contributeStrategyImplementations(NamedStrategyContributions contributions) {
+ contributions.contributeStrategyImplementor(
+ PropertyAccessStrategy.class,
+ TraitPropertyAccessStrategy.class,
+ "traitProperty"
+ );
+ }
+
+ @Override
+ public void clearStrategyImplementations(NamedStrategyContributions contributions) {
+ contributions.removeStrategyImplementor(PropertyAccessStrategy.class
+ , TraitPropertyAccessStrategy.class);
+ }
+
+}
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContextConfiguration.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContextConfiguration.java
index 9ae365ab19..b0b389e6b7 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContextConfiguration.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContextConfiguration.java
@@ -32,7 +32,6 @@ import org.grails.orm.hibernate.EventListenerIntegrator;
import org.grails.orm.hibernate.GrailsSessionContext;
import org.grails.orm.hibernate.HibernateEventListeners;
import org.grails.orm.hibernate.MetadataIntegrator;
-import org.grails.orm.hibernate.access.TraitPropertyAccessStrategy;
import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
@@ -44,14 +43,13 @@ import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
-import org.hibernate.boot.registry.selector.spi.StrategySelector;
import org.hibernate.boot.spi.AdditionalMappingContributor;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
+import org.hibernate.cfg.JdbcSettings;
import org.hibernate.context.spi.CurrentSessionContext;
import org.hibernate.internal.util.config.ConfigurationHelper;
-import org.hibernate.property.access.spi.PropertyAccessStrategy;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.springframework.beans.BeansException;
@@ -112,7 +110,7 @@ public class HibernateMappingContextConfiguration extends Configuration
Properties properties = getProperties();
if (applicationContext.containsBean(dsName)) {
- properties.put(Environment.DATASOURCE, applicationContext.getBean(dsName));
+ properties.put(JdbcSettings.JAKARTA_NON_JTA_DATASOURCE, applicationContext.getBean(dsName));
}
properties.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, currentSessionContext.getName());
properties.put(AvailableSettings.CLASSLOADERS, applicationContext.getClassLoader());
@@ -127,7 +125,7 @@ public class HibernateMappingContextConfiguration extends Configuration
ConnectionSource<DataSource, DataSourceSettings> connectionSource) {
this.dataSourceName = connectionSource.getName();
DataSource source = connectionSource.getSource();
- getProperties().put(Environment.DATASOURCE, source);
+ getProperties().put(JdbcSettings.JAKARTA_NON_JTA_DATASOURCE, source);
getProperties()
.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, GrailsSessionContext.class.getName());
final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
@@ -295,10 +293,9 @@ public class HibernateMappingContextConfiguration extends Configuration
.applyIntegrator(new MetadataIntegrator())
.applyClassLoaderService(classLoaderService)
.build();
- StrategySelector strategySelector = bootstrapServiceRegistry.getService(StrategySelector.class);
- strategySelector.registerStrategyImplementor(
- PropertyAccessStrategy.class, "traitProperty", TraitPropertyAccessStrategy.class);
+
+
SessionFactoryObserver sessionFactoryObserver =
new SessionFactoryObserver() {
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyProvider.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyProvider.java
index 7a36ab44fd..8883252ce3 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyProvider.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyProvider.java
@@ -21,15 +21,15 @@ package org.grails.orm.hibernate.cfg.domainbinding.util;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import org.grails.datastore.mapping.core.connections.ConnectionSource;
-import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
+import org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl;
public class NamingStrategyProvider {
private final ConcurrentHashMap<String, PhysicalNamingStrategy> physicalProviderMap;
public NamingStrategyProvider() {
physicalProviderMap = new ConcurrentHashMap<>();
- physicalProviderMap.put(ConnectionSource.DEFAULT, new CamelCaseToUnderscoresNamingStrategy());
+ physicalProviderMap.put(ConnectionSource.DEFAULT, new PhysicalNamingStrategySnakeCaseImpl());
}
/**
@@ -54,7 +54,7 @@ public class NamingStrategyProvider {
if (strategyInstance instanceof PhysicalNamingStrategy physicalStrategy) {
physicalProviderMap.put(datasourceName, physicalStrategy);
} else {
- physicalProviderMap.put(datasourceName, new CamelCaseToUnderscoresNamingStrategy());
+ physicalProviderMap.put(datasourceName, new PhysicalNamingStrategySnakeCaseImpl());
}
}
@@ -78,7 +78,7 @@ public class NamingStrategyProvider {
public PhysicalNamingStrategy getPhysicalNamingStrategy(String sessionFactoryBeanName) {
String key = getKey(sessionFactoryBeanName);
- physicalProviderMap.putIfAbsent(key, new CamelCaseToUnderscoresNamingStrategy());
+ physicalProviderMap.putIfAbsent(key, new PhysicalNamingStrategySnakeCaseImpl());
return physicalProviderMap.get(key);
}
diff --git a/grails-data-hibernate7/core/src/main/resources/META-INF/services/org.hibernate.boot.registry.selector.spi.NamedStrategyContributor b/grails-data-hibernate7/core/src/main/resources/META-INF/services/org.hibernate.boot.registry.selector.spi.NamedStrategyContributor
new file mode 100644
index 0000000000..b3bece347f
--- /dev/null
+++ b/grails-data-hibernate7/core/src/main/resources/META-INF/services/org.hibernate.boot.registry.selector.spi.NamedStrategyContributor
@@ -0,0 +1 @@
+org.grails.orm.hibernate.cfg.GrailsNamedStrategyContributor
\ No newline at end of file
diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamingStrategyProviderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamingStrategyProviderSpec.groovy
index a132f12823..83c1e036e8 100644
--- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamingStrategyProviderSpec.groovy
+++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamingStrategyProviderSpec.groovy
@@ -1,7 +1,7 @@
package org.grails.orm.hibernate.cfg.domainbinding
import grails.gorm.specs.HibernateGormDatastoreSpec
-import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
+import org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl
import org.hibernate.boot.model.naming.PhysicalNamingStrategy
import org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyProvider
@@ -14,7 +14,7 @@ class NamingStrategyProviderSpec extends HibernateGormDatastoreSpec {
def strategy = provider.getPhysicalNamingStrategy("sessionFactory")
then:
- strategy instanceof CamelCaseToUnderscoresNamingStrategy
+ strategy instanceof PhysicalNamingStrategySnakeCaseImpl
}
void "Test configureNamingStrategy with null strategy throws exception"() {
@@ -73,7 +73,7 @@ class NamingStrategyProviderSpec extends HibernateGormDatastoreSpec {
def strategy = provider.getPhysicalNamingStrategy("sessionFactory")
then:
- strategy instanceof CamelCaseToUnderscoresNamingStrategy
+ strategy instanceof PhysicalNamingStrategySnakeCaseImpl
}
void "Test getPhysicalNamingStrategy with custom session factory"() {