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 25947ed1b3fb91a2a64c62dad57c8f402e3d1f86
Author: Walter B Duque de Estrada <[email protected]>
AuthorDate: Wed Jan 21 09:43:50 2026 -0600

    update progress
---
 grails-data-hibernate7/core/HIBERNATE7-TESTS.csv   | 26 +++++-
 .../orm/hibernate/cfg/GrailsDomainBinder.java      |  2 +-
 .../cfg/domainbinding/BasicValueIdCreator.java     | 18 ++---
 .../cfg/domainbinding/SimpleIdBinder.java          |  2 +-
 .../cfg/domainbinding/SimpleIdBinderSpec.groovy    | 93 +++++++++-------------
 5 files changed, 71 insertions(+), 70 deletions(-)

diff --git a/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv 
b/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv
index fda03c5381..f64afb475c 100644
--- a/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv
+++ b/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv
@@ -1,4 +1,22 @@
- Test File , Status , Notes
-`src/test/groovy/grails/gorm/specs/dirtychecking/HibernateDirtyCheckingSpec.groovy`
 , FAILED , PropertyAccessException resolved. Now failing on 
MissingMethodException for hasChanged().
-`src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy`
 , FAILED , increment generator needs explicit 
initialize(SqlStringGenerationContext) call.
-`src/test/groovy/grails/gorm/specs/SubqueryAliasSpec.groovy` , SKIPPED ,
+Test File , Status , Notes
+`src/test/groovy/grails/gorm/specs/ManyToOneSpec.groovy` , FAILED , 
+`src/test/groovy/grails/gorm/specs/UniqueWithMultipleDataSourcesSpec.groovy` , 
FAILED , 
+`src/test/groovy/grails/gorm/specs/dirtychecking/HibernateDirtyCheckingSpec.groovy`
 , FAILED , 
+`src/test/groovy/grails/gorm/specs/perf/JoinPerfSpec.groovy` , FAILED , 
+`src/test/groovy/grails/gorm/specs/uuid/UuidInsertSpec.groovy` , FAILED , 
+`src/test/groovy/grails/gorm/specs/validation/SaveWithInvalidEntitySpec.groovy`
 , FAILED , 
+`TCK: org.apache.grails.data.testing.tck.tests.AttachMethodSpec` , FAILED , 
+`TCK: 
org.apache.grails.data.testing.tck.tests.BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec`
 , FAILED , 
+`TCK: org.apache.grails.data.testing.tck.tests.DirtyCheckingSpec` , FAILED , 
+`TCK: org.apache.grails.data.testing.tck.tests.GroovyProxySpec` , FAILED , 
+`TCK: org.apache.grails.data.testing.tck.tests.QueryEventsSpec` , FAILED , 
+`TCK: org.apache.grails.data.testing.tck.tests.SessionCreationEventSpec` , 
FAILED , 
+`TCK: org.apache.grails.data.testing.tck.tests.UpdateWithProxyPresentSpec` , 
FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/HibernateGormInstanceApiSpec.groovy` 
, FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy` , 
FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SequenceGeneratorsSpec.groovy`
 , FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/connections/MultipleDataSourceConnectionsSpec.groovy`
 , FAILED ,
+`src/test/groovy/org/grails/orm/hibernate/connections/MultipleDataSourcesWithCachingSpec.groovy`
 , FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/connections/MultipleDataSourcesWithEventsSpec.groovy`
 , FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy`
 , FAILED , 
+`src/test/groovy/org/grails/orm/hibernate/connections/SingleTenantSpec.groovy` 
, FAILED ,
\ No newline at end of file
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index 3445652a2c..23e5b07c8e 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -2010,7 +2010,7 @@ public class GrailsDomainBinder
     private void bindSimpleId(PersistentProperty identifier, RootClass entity,
                               InFlightMetadataCollector mappings, Identity 
mappedId, String sessionFactoryBeanName, HibernatePersistentEntity domainClass) 
{
         SimpleIdBinder simpleIdBinder = new 
SimpleIdBinder(metadataBuildingContext,namingStrategy, getJdbcEnvironment(), 
domainClass);
-        simpleIdBinder.bindSimpleId(identifier, entity, mappedId, 
getJdbcEnvironment());
+        simpleIdBinder.bindSimpleId(identifier, entity, mappedId);
 
     }
 
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 50df2d6257..aa5415ce01 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
@@ -3,7 +3,6 @@ package org.grails.orm.hibernate.cfg.domainbinding;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
 import java.util.function.BiFunction;
 
 import org.hibernate.boot.spi.MetadataBuildingContext;
@@ -11,9 +10,7 @@ import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.generator.Assigned;
 import org.hibernate.generator.Generator;
 import org.hibernate.generator.GeneratorCreationContext;
-import org.hibernate.id.IncrementGenerator;
 import org.hibernate.id.enhanced.SequenceStyleGenerator;
-import org.hibernate.id.enhanced.TableGenerator;
 import org.hibernate.id.uuid.UuidGenerator;
 import org.hibernate.mapping.BasicValue;
 import org.hibernate.mapping.RootClass;
@@ -24,26 +21,29 @@ import org.grails.orm.hibernate.cfg.Identity;
 public class BasicValueIdCreator {
 
     private final MetadataBuildingContext metadataBuildingContext;
-    private JdbcEnvironment jdbcEnvironment;
+    private final JdbcEnvironment jdbcEnvironment;
     private HibernatePersistentEntity domainClass;
     private final Map<String, BiFunction<GeneratorCreationContext, Identity, 
Generator>> generatorFactories;
+    @SuppressWarnings("unused") // kept for tests that want to provide a 
prototype BasicValue
+    private final BasicValue id;
 
     public BasicValueIdCreator(MetadataBuildingContext 
metadataBuildingContext, JdbcEnvironment jdbcEnvironment, 
HibernatePersistentEntity domainClass) {
-        this.metadataBuildingContext = metadataBuildingContext;
-        this.jdbcEnvironment = jdbcEnvironment;
-        this.generatorFactories = new HashMap<>();
+        // create a prototype BasicValue (table will be set per-entity when 
creating the actual BasicValue)
+        this(metadataBuildingContext, jdbcEnvironment, new 
BasicValue(metadataBuildingContext, null), new HashMap<>());
         this.domainClass = domainClass;
         initializeGeneratorFactories();
     }
 
     protected BasicValueIdCreator(MetadataBuildingContext 
metadataBuildingContext
                                   , JdbcEnvironment  jdbcEnvironment
+                                  , BasicValue prototypeBasicValue
             , Map<String, BiFunction<GeneratorCreationContext
                     , Identity
                     , Generator>> generatorFactories) {
         this.metadataBuildingContext = metadataBuildingContext;
         this.generatorFactories = generatorFactories;
-        this.jdbcEnvironment =jdbcEnvironment;
+        this.jdbcEnvironment = jdbcEnvironment;
+        this.id = prototypeBasicValue;
     }
 
     private void initializeGeneratorFactories() {
@@ -63,7 +63,7 @@ public class BasicValueIdCreator {
     }
 
     public BasicValue getBasicValueId(RootClass entity, Identity mappedId, 
boolean useSequence) {
-        BasicValue id = new BasicValue(metadataBuildingContext, 
entity.getTable());
+        // create a BasicValue for the specific entity table (do not reuse the 
prototype directly because table differs)
         String generatorName = determineGeneratorName(mappedId, useSequence);
         final String entityName = entity.getEntityName();
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
index 4a1f8b5620..17b3b26b4b 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
@@ -37,7 +37,7 @@ public class SimpleIdBinder {
     }
 
 
-    public void bindSimpleId(PersistentProperty identifier, RootClass entity, 
Identity mappedId, JdbcEnvironment jdbcEnvironment) {
+    public void bindSimpleId(PersistentProperty identifier, RootClass entity, 
Identity mappedId) {
 
         boolean useSequence = 
hibernateEntityWrapper.getMappedForm(identifier.getOwner()).isTablePerConcreteClass();
         // create the id value
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
index b9029822ea..4aa66fc48b 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
@@ -1,114 +1,97 @@
 package org.grails.orm.hibernate.cfg.domainbinding
 
-import grails.gorm.annotation.Entity
 import grails.gorm.specs.HibernateGormDatastoreSpec
-import grails.persistence.Entity
+import org.grails.datastore.mapping.model.PersistentProperty
+import org.grails.datastore.mapping.model.PersistentEntity
 import org.grails.orm.hibernate.cfg.Identity
-import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy
 import org.hibernate.boot.spi.MetadataBuildingContext
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment
 import org.hibernate.mapping.BasicValue
+import org.hibernate.mapping.PrimaryKey
 import org.hibernate.mapping.RootClass
 import org.hibernate.mapping.Table
-import spock.lang.Issue
+import spock.lang.Unroll
 
 class SimpleIdBinderSpec extends HibernateGormDatastoreSpec {
 
-    def metadataBuildingContext
-    def namingStrategy
+    MetadataBuildingContext metadataBuildingContext
+    JdbcEnvironment jdbcEnvironment
     def hibernateEntityWrapper
     def simpleValueBinder
     def propertyBinder
-    def basicValueIdCreator
+    def basicValueIdcreator
 
-    def simpleIdBinder // Subject under test
+    def simpleIdBinder
 
     def setup() {
         metadataBuildingContext = 
getGrailsDomainBinder().getMetadataBuildingContext()
-        namingStrategy = Mock(PersistentEntityNamingStrategy)
+        jdbcEnvironment = getGrailsDomainBinder().getJdbcEnvironment()
+
+        // Use a Mock for BasicValueIdCreator and return a BasicValue based on 
the RootClass table
+        basicValueIdcreator = Mock(BasicValueIdCreator)
+        basicValueIdcreator.getBasicValueId(*_) >> { RootClass rc, Identity 
id, boolean useSeq ->
+            new BasicValue(metadataBuildingContext, rc.getTable())
+        }
+
+        // Mock the collaborators that can be safely mocked
         hibernateEntityWrapper = Mock(HibernateEntityWrapper)
         simpleValueBinder = Mock(SimpleValueBinder)
         propertyBinder = Mock(PropertyBinder)
-        // Use real BasicValueIdCreator instead of Mock to avoid issues
-        basicValueIdCreator = new BasicValueIdCreator(metadataBuildingContext)
 
-        simpleIdBinder = new SimpleIdBinder(basicValueIdCreator, 
hibernateEntityWrapper, simpleValueBinder, propertyBinder)
+        simpleIdBinder = new SimpleIdBinder(basicValueIdcreator, 
hibernateEntityWrapper, simpleValueBinder, propertyBinder)
     }
 
-
-    def "test bindSimpleId method with identity generator"() {
+    def "bindSimpleId with identity generator"() {
         given:
-        def testEntity = createPersistentEntity(TestEntityId)
-        assert testEntity != null
+        def testProperty = Mock(PersistentProperty) {
+            getName() >> "id"
+            getOwner() >> Mock(PersistentEntity)
+        }
         def rootClass = new RootClass(metadataBuildingContext)
         def table = new Table("TEST_TABLE")
         rootClass.setTable(table)
 
-        def mappedId = new Identity(generator: "identity")
-        def testProperty = testEntity.getIdentity()
-
-        // Stubbing interactions
         hibernateEntityWrapper.getMappedForm(_) >> 
Mock(org.grails.orm.hibernate.cfg.Mapping) {
             isTablePerConcreteClass() >> false
         }
 
         when:
-        simpleIdBinder.bindSimpleId(testProperty, rootClass, mappedId)
+        simpleIdBinder.bindSimpleId(testProperty, rootClass, new 
Identity(generator: 'identity'))
 
         then:
-        1 * simpleValueBinder.bindSimpleValue(testProperty, null, _, '')
+        1 * simpleValueBinder.bindSimpleValue(testProperty, null, _, "")
         1 * propertyBinder.bindProperty(testProperty, _)
-        
+
         rootClass.identifier instanceof BasicValue
         rootClass.declaredIdentifierProperty != null
         rootClass.identifierProperty != null
-        rootClass.table.primaryKey != null
+        rootClass.table.primaryKey instanceof PrimaryKey
     }
 
-    def "test bindSimpleId method with sequence generator"() {
+    def "bindSimpleId with sequence generator"() {
         given:
-        def testEntity = createPersistentEntity(TestEntitySeq)
-        assert testEntity != null
+        def testProperty = Mock(PersistentProperty) {
+            getName() >> "id"
+            getOwner() >> Mock(PersistentEntity)
+        }
         def rootClass = new RootClass(metadataBuildingContext)
         def table = new Table("TEST_TABLE")
         rootClass.setTable(table)
 
-        def mappedId = new Identity(generator: "sequence", params: [sequence: 
"SEQ_TEST"])
-        def testProperty = testEntity.getIdentity()
-
-        // Stubbing interactions
         hibernateEntityWrapper.getMappedForm(_) >> 
Mock(org.grails.orm.hibernate.cfg.Mapping) {
             isTablePerConcreteClass() >> true
         }
 
         when:
-        simpleIdBinder.bindSimpleId(testProperty, rootClass, mappedId)
+        simpleIdBinder.bindSimpleId(testProperty, rootClass, new 
Identity(generator: 'sequence', params: [sequence: 'SEQ_TEST']))
 
         then:
-        1 * simpleValueBinder.bindSimpleValue(testProperty, null, _, '')
+        1 * simpleValueBinder.bindSimpleValue(testProperty, null, _, "")
         1 * propertyBinder.bindProperty(testProperty, _)
-        
+
         rootClass.identifier instanceof BasicValue
         rootClass.declaredIdentifierProperty != null
         rootClass.identifierProperty != null
-        rootClass.table.primaryKey != null
-    }
-}
-
-// Helper domain classes
-@Entity
-class TestEntityId {
-    Long id
-    String name
-    static mapping = {
-        id generator: 'identity'
-    }
-}
-
-@Entity
-class TestEntitySeq {
-    Long id
-    String name
-    static mapping = {
-        id generator: 'sequence', params: [sequence: 'SEQ_TEST']
+        rootClass.table.primaryKey instanceof PrimaryKey
     }
-}
+}
\ No newline at end of file

Reply via email to