This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 952b1f535dbecd5a3ab6dc4bf923c383a45b5d22
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Wed Mar 11 21:23:36 2026 -0500

    hibernate 7: refactor ClassBinder
---
 .../orm/hibernate/cfg/HibernateMappingContext.java |  8 +++---
 .../cfg/domainbinding/binder/ClassBinder.java      | 15 ++++++++---
 .../cfg/domainbinding/binder/RootBinder.java       |  2 +-
 .../RootPersistentClassCommonValuesBinder.java     |  8 +-----
 .../hibernate/GrailsHibernatePersistentEntity.java |  5 ++++
 .../HibernateEmbeddedPersistentEntity.java         | 13 ++++++++++
 .../hibernate/HibernatePersistentEntity.java       | 13 ++++++++++
 .../grails/gorm/specs/RLikeHibernate7Spec.groovy   |  4 +--
 .../cfg/domainbinding/ClassBinderSpec.groovy       | 29 ++++++++++++++++++++++
 .../cfg/domainbinding/binder/RootBinderSpec.groovy |  6 ++---
 ...ootPersistentClassCommonValuesBinderSpec.groovy |  4 +--
 11 files changed, 83 insertions(+), 24 deletions(-)

diff --git 
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
 
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
index d69c5e234a..aed3f004d3 100644
--- 
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
+++ 
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
@@ -66,16 +66,14 @@ public class HibernateMappingContext extends 
AbstractMappingContext {
      * @param contextObject The context object (for example a Spring 
ApplicationContext)
      * @param persistentClasses The persistent classes
      */
-    public HibernateMappingContext(HibernateConnectionSourceSettings settings, 
Object contextObject, Class... persistentClasses) {
+    public HibernateMappingContext(HibernateConnectionSourceSettings settings, 
Object contextObject, Class<?>... persistentClasses) {
         this.mappingFactory = new HibernateMappingFactory();
 
         // The mapping factory needs to be configured before initialize can be 
safely called
         initialize(settings);
 
-        if (settings != null) {
-            
this.mappingFactory.setDefaultMapping(settings.getDefault().getMapping());
-            
this.mappingFactory.setDefaultConstraints(settings.getDefault().getConstraints());
-        }
+        
this.mappingFactory.setDefaultMapping(settings.getDefault().getMapping());
+        
this.mappingFactory.setDefaultConstraints(settings.getDefault().getConstraints());
         this.mappingFactory.setContextObject(contextObject);
         this.syntaxStrategy = new 
JpaMappingConfigurationStrategy(mappingFactory) {
             @Override
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
index fb580e1013..8635fad54d 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
@@ -51,18 +51,25 @@ public class ClassBinder {
         persistentClass.setJpaEntityName(entityName);
         persistentClass.setProxyInterfaceName(entityName);
         persistentClass.setClassName(entityName);
-        persistentClass.setDynamicInsert(false);
-        persistentClass.setDynamicUpdate(false);
-        persistentClass.setSelectBeforeUpdate(false);
+        persistentClass.setAbstract(persistentEntity.isAbstract());
 
-        boolean autoImport;
         Mapping mappedForm = persistentEntity.getMappedForm();
+        boolean autoImport;
         if (mappedForm != null) {
             autoImport = mappedForm.isAutoImport();
+            persistentClass.setDynamicInsert(mappedForm.isDynamicInsert());
+            persistentClass.setDynamicUpdate(mappedForm.isDynamicUpdate());
+            persistentClass.setBatchSize(mappedForm.getBatchSize() != null ? 
mappedForm.getBatchSize() : 0);
         } else {
             autoImport =
                     
collector.getMetadataBuildingOptions().getMappingDefaults().isAutoImportEnabled();
+            persistentClass.setDynamicInsert(false);
+            persistentClass.setDynamicUpdate(false);
+            persistentClass.setBatchSize(0);
         }
+        persistentClass.setSelectBeforeUpdate(false);
+        persistentEntity.setPersistentClass(persistentClass);
+
         if (autoImport) {
             String unqualified = unqualify(entityName);
             persistentClass.setJpaEntityName(unqualified);
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java
index 2eb4cc3ded..1e73138432 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java
@@ -71,7 +71,7 @@ public class RootBinder {
         }
 
         Collection<GrailsHibernatePersistentEntity> children = 
entity.getChildEntities(dataSourceName);
-        RootClass root = 
rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity);
+        RootClass root = 
rootPersistentClassCommonValuesBinder.bindRoot(entity);
 
         if (!children.isEmpty() && entity.isTablePerHierarchy()) {
             discriminatorPropertyBinder.bindDiscriminatorProperty(root);
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java
index ff316527ee..7cf4f3adb3 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java
@@ -31,8 +31,6 @@ import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
 
-import static java.util.Optional.ofNullable;
-
 public class RootPersistentClassCommonValuesBinder {
     public static final Logger LOG = 
LoggerFactory.getLogger(RootPersistentClassCommonValuesBinder.class);
 
@@ -61,10 +59,9 @@ public class RootPersistentClassCommonValuesBinder {
         this.mappings = mappings;
     }
 
-    public RootClass bindRootPersistentClassCommonValues(@Nonnull 
GrailsHibernatePersistentEntity domainClass) {
+    public RootClass bindRoot(@Nonnull GrailsHibernatePersistentEntity 
domainClass) {
 
         RootClass root = new RootClass(this.metadataBuildingContext);
-        root.setAbstract(domainClass.isAbstract());
         classBinder.bindClass(domainClass, root);
 
         // get the schema and catalog names from the configuration
@@ -80,9 +77,6 @@ public class RootPersistentClassCommonValuesBinder {
             }
             
root.setLazyPropertiesCacheable(!"non-lazy".equals(cc.getInclude()));
         }
-        root.setBatchSize(ofNullable(gormMapping.getBatchSize()).orElse(0));
-        root.setDynamicUpdate(gormMapping.getDynamicUpdate());
-        root.setDynamicInsert(gormMapping.getDynamicInsert());
 
         var schema = domainClass.getSchema(mappings);
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java
index 181e6e2539..8208e46249 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java
@@ -29,6 +29,7 @@ import java.util.stream.Stream;
 import jakarta.annotation.Nonnull;
 
 import org.hibernate.boot.spi.InFlightMetadataCollector;
+import org.hibernate.mapping.PersistentClass;
 
 import org.grails.datastore.mapping.model.PersistentEntity;
 import org.grails.datastore.mapping.model.PersistentProperty;
@@ -298,4 +299,8 @@ public interface GrailsHibernatePersistentEntity extends 
PersistentEntity {
     default String getComment() {
         return 
Optional.ofNullable(getMappedForm()).map(Mapping::getComment).orElse(null);
     }
+
+    void setPersistentClass(PersistentClass persistentClass);
+
+    PersistentClass getPersistentClass();
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateEmbeddedPersistentEntity.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateEmbeddedPersistentEntity.java
index 645cbb6f5f..fc56307c5e 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateEmbeddedPersistentEntity.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateEmbeddedPersistentEntity.java
@@ -18,6 +18,8 @@
  */
 package org.grails.orm.hibernate.cfg.domainbinding.hibernate;
 
+import org.hibernate.mapping.PersistentClass;
+
 import org.grails.datastore.mapping.core.connections.ConnectionSourcesSupport;
 import org.grails.datastore.mapping.model.*;
 import org.grails.orm.hibernate.cfg.Mapping;
@@ -26,6 +28,7 @@ public class HibernateEmbeddedPersistentEntity extends 
EmbeddedPersistentEntity<
         implements GrailsHibernatePersistentEntity {
     private final ClassMapping<Mapping> classMapping;
     private String dataSourceName;
+    private PersistentClass persistentClass;
 
     public Mapping getMappedForm() {
         return classMapping.getMappedForm();
@@ -80,4 +83,14 @@ public class HibernateEmbeddedPersistentEntity extends 
EmbeddedPersistentEntity<
     public ClassMapping<Mapping> getMapping() {
         return classMapping;
     }
+
+    @Override
+    public void setPersistentClass(PersistentClass persistentClass) {
+        this.persistentClass = persistentClass;
+    }
+
+    @Override
+    public PersistentClass getPersistentClass() {
+        return persistentClass;
+    }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentEntity.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentEntity.java
index 8cb9ea5f6c..e49387a6cb 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentEntity.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentEntity.java
@@ -23,6 +23,8 @@ import java.util.Optional;
 
 import jakarta.persistence.Entity;
 
+import org.hibernate.mapping.PersistentClass;
+
 import org.grails.datastore.mapping.core.connections.ConnectionSourcesSupport;
 import org.grails.datastore.mapping.model.*;
 import org.grails.orm.hibernate.cfg.Mapping;
@@ -37,6 +39,7 @@ public class HibernatePersistentEntity extends 
AbstractPersistentEntity<Mapping>
         implements GrailsHibernatePersistentEntity {
     private final AbstractClassMapping<Mapping> classMapping;
     private String dataSourceName;
+    private PersistentClass persistentClass;
 
     public HibernatePersistentEntity(Class<?> javaClass, final MappingContext 
context) {
         super(javaClass, context);
@@ -98,4 +101,14 @@ public class HibernatePersistentEntity extends 
AbstractPersistentEntity<Mapping>
     public HibernatePersistentProperty getVersion() {
         return (HibernatePersistentProperty) version;
     }
+
+    @Override
+    public void setPersistentClass(PersistentClass persistentClass) {
+        this.persistentClass = persistentClass;
+    }
+
+    @Override
+    public PersistentClass getPersistentClass() {
+        return persistentClass;
+    }
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/RLikeHibernate7Spec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/RLikeHibernate7Spec.groovy
index c688bc98c7..ad9ddf1e30 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/RLikeHibernate7Spec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/RLikeHibernate7Spec.groovy
@@ -29,13 +29,13 @@ import spock.lang.Shared
 import spock.lang.Unroll
 
 @Testcontainers
-@Requires({ HibernateGormDatastoreSpec.isDockerAvailable() })
+@Requires({ isDockerAvailable() })
 class RLikeHibernate7Spec extends HibernateGormDatastoreSpec {
 
     @Shared postgres = new PostgreSQLContainer("postgres:16")
     @Shared mysql = new MySQLContainer("mysql:8.0")
     @Shared mariadb = new MariaDBContainer("mariadb:10.11")
-    @Shared oracle = new OracleContainer("gvenzl/oracle-free:23-slim")
+    @Shared oracle = new OracleContainer("gvenzl/oracle-free:slim-faststart")
 
     void setupSpec() {
         manager.addAllDomainClasses([RlikeFoo])
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
index 39d060308f..b9d53c9795 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
@@ -30,6 +30,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
         !root.useDynamicInsert()
         !root.useDynamicUpdate()
         !root.hasSelectBeforeUpdate()
+        root.getBatchSize() == 0
         collector.getImports()[simpleName] == persistentName
     }
 
@@ -55,6 +56,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
         !root.useDynamicInsert()
         !root.useDynamicUpdate()
         !root.hasSelectBeforeUpdate()
+        root.getBatchSize() == 0
         collector.getImports()[simpleName] == persistentName
     }
 
@@ -80,8 +82,35 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
         !root.useDynamicInsert()
         !root.useDynamicUpdate()
         !root.hasSelectBeforeUpdate()
+        root.getBatchSize() == 0
         !collector.getImports()[simpleName]
     }
 
+    void "Test dynamic update and insert true"() {
+        when:
+
+        def collector = getCollector()
+        def grailsDomainBinder = getGrailsDomainBinder()
+
+        def simpleName = "Book"
+        def persistentName = "foo.Book"
+        def persistentEntity = 
createPersistentEntity(grailsDomainBinder,simpleName, [:], [dynamicUpdate: 
"true", dynamicInsert: "true", batchSize: "10"])
+        def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
+        def binder = new ClassBinder(collector)
+
+        binder.bindClass(persistentEntity,root)
+        then:
+        root.getEntityName() == persistentName
+        root.getJpaEntityName() == simpleName
+        root.getProxyInterfaceName() == persistentName
+        root.getClassName() == persistentName
+        root.isLazy()
+        root.useDynamicInsert()
+        root.useDynamicUpdate()
+        !root.hasSelectBeforeUpdate()
+        root.getBatchSize() == 10
+        collector.getImports()[simpleName] == persistentName
+    }
+
 
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy
index 6baf5c9f56..0a42629250 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy
@@ -57,7 +57,7 @@ class RootBinderSpec extends HibernateGormDatastoreSpec {
         binder.bindRoot(entity)
 
         then:
-        1 * 
rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity)
 >> rootClass
+        1 * rootPersistentClassCommonValuesBinder.bindRoot(entity) >> rootClass
         0 * discriminatorPropertyBinder.bindDiscriminatorProperty(_)
         0 * subClassBinder.bindSubClass(_, _)
         1 * multiTenantFilterBinder.bind(entity, rootClass)
@@ -84,7 +84,7 @@ class RootBinderSpec extends HibernateGormDatastoreSpec {
         binder.bindRoot(entity)
 
         then:
-        1 * 
rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity)
 >> rootClass
+        1 * rootPersistentClassCommonValuesBinder.bindRoot(entity) >> rootClass
         1 * discriminatorPropertyBinder.bindDiscriminatorProperty(rootClass)
         1 * subClassBinder.bindSubClass(childEntity, rootClass) >> []
         1 * multiTenantFilterBinder.bind(entity, rootClass)
@@ -105,6 +105,6 @@ class RootBinderSpec extends HibernateGormDatastoreSpec {
         binder.bindRoot(entity)
 
         then:
-        0 * 
rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(_, _)
+        0 * rootPersistentClassCommonValuesBinder.bindRoot(_, _)
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy
index fbb838dbe5..7c50d612a0 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy
@@ -53,7 +53,7 @@ class RootPersistentClassCommonValuesBinderSpec extends 
HibernateGormDatastoreSp
         def mappings = getCollector()
 
         when:
-        RootClass rootClass = 
binder.bindRootPersistentClassCommonValues(entity)
+        RootClass rootClass = binder.bindRoot(entity)
 
         then:
         1 * classPropertiesBinder.bindClassProperties(entity, _)
@@ -69,7 +69,7 @@ class RootPersistentClassCommonValuesBinderSpec extends 
HibernateGormDatastoreSp
         def mappings = getCollector()
 
         when:
-        RootClass rootClass = 
binder.bindRootPersistentClassCommonValues(entity)
+        RootClass rootClass = binder.bindRoot(entity)
 
         then:
         rootClass != null

Reply via email to