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 958812ad8d5e8292ebe772a6e6a68bcccdbf9e7a
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Thu Mar 5 21:49:24 2026 -0600

    hibernate7: cleanup update MapSecondPassBinderSpec
---
 .../secondpass/MapSecondPassBinderSpec.groovy      | 100 ++++++++++++++++++---
 1 file changed, 87 insertions(+), 13 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
index 8e9c9e65f6..17c37ff7d5 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
@@ -3,6 +3,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.secondpass
 import grails.gorm.specs.HibernateGormDatastoreSpec
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty
+import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty
 import org.hibernate.mapping.OneToMany
 import org.hibernate.mapping.RootClass
 import org.hibernate.boot.spi.MetadataBuildingContext
@@ -154,31 +155,104 @@ class MapSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
         manager.addAllDomainClasses([
             org.apache.grails.data.testing.tck.domains.Pet,
             org.apache.grails.data.testing.tck.domains.Person,
-            org.apache.grails.data.testing.tck.domains.PetType
+            org.apache.grails.data.testing.tck.domains.PetType,
+            MSBAuthor,
+            MSBBook
         ])
     }
 
-    void "Test bind collection"() {
+    void "Test bind map"() {
         given:
         def binder = getGrailsDomainBinder()
-        def collectionBinder = getBinders(binder).collectionBinder
         def collector = getCollector()
+        def metadataBuildingContext = binder.getMetadataBuildingContext()
+        def namingStrategy = binder.getNamingStrategy()
+        def binders = getBinders(binder)
+        def collectionBinder = binders.collectionBinder
+        def mapBinder = collectionBinder.mapSecondPassBinder
+
+        def authorEntity = getPersistentEntity(MSBAuthor) as 
GrailsHibernatePersistentEntity
+        def booksProp = authorEntity.getPropertyByName("books") as 
HibernateToManyProperty
+
+        def rootClass = new RootClass(metadataBuildingContext)
+        rootClass.setEntityName(authorEntity.name)
+        rootClass.setTable(collector.addTable(null, null, "MSB_AUTHOR", null, 
false, metadataBuildingContext))
+        collector.addEntityBinding(rootClass)
+
+        def map = new org.hibernate.mapping.Map(metadataBuildingContext, 
rootClass)
+        map.setRole("${authorEntity.name}.books".toString())
+        map.setCollectionTable(rootClass.getTable())
+
+        when:
+        mapBinder.bindMapSecondPass(booksProp, collector, [:], map)
+
+        then:
+        noExceptionThrown()
+        map.index != null
+        map.index.isTypeSpecified()
+        map.element != null
+        !map.inverse
+    }
+
+    void "Test bind map with custom index column"() {
+        given:
+        def binder = getGrailsDomainBinder()
+        def collector = getCollector()
+        def metadataBuildingContext = binder.getMetadataBuildingContext()
+        def namingStrategy = binder.getNamingStrategy()
+        def binders = getBinders(binder)
+        def collectionBinder = binders.collectionBinder
+        def mapBinder = collectionBinder.mapSecondPassBinder
 
-        def personEntity = 
getPersistentEntity(org.apache.grails.data.testing.tck.domains.Person) as 
GrailsHibernatePersistentEntity
-        def petEntity = 
getPersistentEntity(org.apache.grails.data.testing.tck.domains.Pet) as 
GrailsHibernatePersistentEntity
+        def authorEntity = getPersistentEntity(MSBAuthor) as 
GrailsHibernatePersistentEntity
+        def booksProp = authorEntity.getPropertyByName("books") as 
HibernateToManyProperty
 
-        def rootClass = new RootClass(binder.getMetadataBuildingContext())
-        rootClass.setEntityName(personEntity.name)
-        rootClass.setTable(collector.addTable(null, null, "PERSON", null, 
false, binder.getMetadataBuildingContext()))
+        def rootClass = new RootClass(metadataBuildingContext)
+        rootClass.setEntityName(authorEntity.name)
+        rootClass.setTable(collector.addTable(null, null, "MSB_AUTHOR", null, 
false, metadataBuildingContext))
+        collector.addEntityBinding(rootClass)
+
+        def bookRootClass = new RootClass(metadataBuildingContext)
+        bookRootClass.setEntityName(MSBBook.name)
+        bookRootClass.setTable(collector.addTable(null, null, "MSB_BOOK", 
null, false, metadataBuildingContext))
+        collector.addEntityBinding(bookRootClass)
+
+        def persistentClasses = [
+            (authorEntity.name): rootClass,
+            (MSBBook.name): bookRootClass
+        ]
 
-        def petsProp = personEntity.getPropertyByName("pets") as 
HibernatePersistentProperty
+        def map = new org.hibernate.mapping.Map(metadataBuildingContext, 
rootClass)
+        map.setRole("${authorEntity.name}.books".toString())
+        map.setCollectionTable(rootClass.getTable())
+        
+        def element = new 
org.hibernate.mapping.ManyToOne(metadataBuildingContext, 
map.getCollectionTable())
+        element.setReferencedEntityName(MSBBook.name)
+        map.setElement(element)
 
         when:
-        def collection = collectionBinder.bindCollection(petsProp, rootClass, 
"")
+        mapBinder.bindMapSecondPass(booksProp, collector, persistentClasses, 
map)
 
         then:
-        collection.role == "${personEntity.name}.pets".toString()
-        collection.element instanceof OneToMany
-        (collection.element as OneToMany).referencedEntityName == 
petEntity.name
+        noExceptionThrown()
+        map.index != null
+        map.index.isTypeSpecified()
+        map.index.getColumnIterator().next().name == "BOOK_TITLE"
     }
 }
+
[email protected]
+class MSBAuthor {
+    Long id
+    Map<String, MSBBook> books
+    static hasMany = [books: MSBBook]
+    static mapping = {
+        books index: 'BOOK_TITLE'
+    }
+}
+
[email protected]
+class MSBBook {
+    Long id
+    String title
+}

Reply via email to