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 +}
