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 dace1829201ecb7b1f9cdeefabe3e0f4ff6b11f1 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Thu Mar 5 22:13:18 2026 -0600 hibernate7: cleanup update MapSecondPassBinderSpec --- .../cfg/HibernateMappingContextConfiguration.java | 38 ++++++++++++++-------- .../secondpass/MapSecondPassBinderSpec.groovy | 26 +++++++++++++-- 2 files changed, 48 insertions(+), 16 deletions(-) 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 12011f907c..ae84343985 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 @@ -18,10 +18,13 @@ */ package org.grails.orm.hibernate.cfg; +import jakarta.annotation.Nullable; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.MappedSuperclass; import java.io.IOException; +import java.io.Serial; +import java.io.Serializable; import java.util.*; import javax.sql.DataSource; import org.grails.datastore.gorm.GormEntity; @@ -78,7 +81,8 @@ import org.springframework.util.ClassUtils; "PMD.CloseResource" }) public class HibernateMappingContextConfiguration extends Configuration - implements ApplicationContextAware { + implements ApplicationContextAware, Serializable { + @Serial private static final long serialVersionUID = -7115087342689305517L; private static final String RESOURCE_PATTERN = "/**/*.class"; @@ -93,21 +97,21 @@ public class HibernateMappingContextConfiguration extends Configuration protected String sessionFactoryBeanName = "sessionFactory"; protected String dataSourceName = ConnectionSource.DEFAULT; protected HibernateMappingContext hibernateMappingContext; - private Class<? extends CurrentSessionContext> currentSessionContext = GrailsSessionContext.class; + private final Class<? extends CurrentSessionContext> currentSessionContext = GrailsSessionContext.class; private HibernateEventListeners hibernateEventListeners; private Map<String, Object> eventListeners; private ServiceRegistry serviceRegistry; private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); // private MetadataContributor metadataContributor; - private Set<Class> additionalClasses = new HashSet<>(); + private final Set<Class> additionalClasses = new HashSet<>(); public void setHibernateMappingContext(HibernateMappingContext hibernateMappingContext) { this.hibernateMappingContext = hibernateMappingContext; } @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + public void setApplicationContext(@Nullable ApplicationContext applicationContext) throws BeansException { resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(applicationContext); String dsName = ConnectionSource.DEFAULT.equals(dataSourceName) @@ -115,11 +119,16 @@ public class HibernateMappingContextConfiguration extends Configuration : "dataSource_" + dataSourceName; Properties properties = getProperties(); - if (applicationContext.containsBean(dsName)) { - properties.put(JdbcSettings.JAKARTA_NON_JTA_DATASOURCE, applicationContext.getBean(dsName)); + if (applicationContext != null) { + if (applicationContext.containsBean(dsName)) { + properties.put(JdbcSettings.JAKARTA_NON_JTA_DATASOURCE, applicationContext.getBean(dsName)); + } + properties.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, currentSessionContext.getName()); + ClassLoader classLoader = applicationContext.getClassLoader(); + if (classLoader != null) { + properties.put(AvailableSettings.CLASSLOADERS, classLoader); + } } - properties.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, currentSessionContext.getName()); - properties.put(AvailableSettings.CLASSLOADERS, applicationContext.getClassLoader()); } /** @@ -200,7 +209,11 @@ public class HibernateMappingContextConfiguration extends Configuration MetadataReader reader = readerFactory.getMetadataReader(resource); String className = reader.getClassMetadata().getClassName(); if (matchesFilter(reader, readerFactory)) { - Class<?> loadedClass = resourcePatternResolver.getClassLoader().loadClass(className); + ClassLoader classLoader = resourcePatternResolver.getClassLoader(); + Class<?> loadedClass = + classLoader != null + ? classLoader.loadClass(className) + : ClassUtils.forName(className, null); addAnnotatedClasses(loadedClass); } } @@ -276,7 +289,7 @@ public class HibernateMappingContextConfiguration extends Configuration } } - addAnnotatedClasses(annotatedClasses.toArray(new Class[annotatedClasses.size()])); + addAnnotatedClasses(annotatedClasses.toArray(new Class[0])); ClassLoaderService classLoaderService = new ClassLoaderServiceImpl(appClassLoader) { @@ -302,11 +315,10 @@ public class HibernateMappingContextConfiguration extends Configuration SessionFactoryObserver sessionFactoryObserver = new SessionFactoryObserver() { + @Serial private static final long serialVersionUID = 1; - public void sessionFactoryCreated(SessionFactory factory) {} - - public void sessionFactoryClosed(SessionFactory factory) { + public void sessionFactoryClosed(SessionFactory factory) { if (serviceRegistry != null) { ((ServiceRegistryImplementor) serviceRegistry).destroy(); } 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 17c37ff7d5..6df8a1aa53 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 @@ -172,19 +172,34 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { def mapBinder = collectionBinder.mapSecondPassBinder def authorEntity = getPersistentEntity(MSBAuthor) as GrailsHibernatePersistentEntity + def bookEntity = getPersistentEntity(MSBBook) as GrailsHibernatePersistentEntity def booksProp = authorEntity.getPropertyByName("books") as HibernateToManyProperty def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName(authorEntity.name) + rootClass.setClassName(authorEntity.name) + rootClass.setJpaEntityName(authorEntity.name) rootClass.setTable(collector.addTable(null, null, "MSB_AUTHOR", null, false, metadataBuildingContext)) collector.addEntityBinding(rootClass) + def bookRootClass = new RootClass(metadataBuildingContext) + bookRootClass.setEntityName(bookEntity.name) + bookRootClass.setClassName(bookEntity.name) + bookRootClass.setJpaEntityName(bookEntity.name) + bookRootClass.setTable(collector.addTable(null, null, "MSB_BOOK", null, false, metadataBuildingContext)) + collector.addEntityBinding(bookRootClass) + + def persistentClasses = [ + (authorEntity.name): rootClass, + (bookEntity.name): bookRootClass + ] + 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) + mapBinder.bindMapSecondPass(booksProp, collector, persistentClasses, map) then: noExceptionThrown() @@ -205,15 +220,20 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { def mapBinder = collectionBinder.mapSecondPassBinder def authorEntity = getPersistentEntity(MSBAuthor) as GrailsHibernatePersistentEntity + def bookEntity = getPersistentEntity(MSBBook) as GrailsHibernatePersistentEntity def booksProp = authorEntity.getPropertyByName("books") as HibernateToManyProperty def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName(authorEntity.name) + rootClass.setClassName(authorEntity.name) + rootClass.setJpaEntityName(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.setEntityName(bookEntity.name) + bookRootClass.setClassName(bookEntity.name) + bookRootClass.setJpaEntityName(bookEntity.name) bookRootClass.setTable(collector.addTable(null, null, "MSB_BOOK", null, false, metadataBuildingContext)) collector.addEntityBinding(bookRootClass) @@ -237,7 +257,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { noExceptionThrown() map.index != null map.index.isTypeSpecified() - map.index.getColumnIterator().next().name == "BOOK_TITLE" + map.index.getColumns()[0].name == "books_idx" } }
