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 c8a9dfc9e536167a8bc86843e6c3e27d8dad4abd
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Tue Mar 3 09:27:04 2026 -0600

    refactor CollectionSecondPassBinder
---
 .../secondpass/CollectionSecondPassBinder.java     | 14 +++-----------
 .../CollectionSecondPassBinderSpec.groovy          | 22 ++++++++++++++++++----
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java
index 27077eb16f..9a34c98add 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java
@@ -219,20 +219,12 @@ public class CollectionSecondPassBinder {
     
collectionForPropertyConfigBinder.bindCollectionForPropertyConfig(collection, 
property);
   }
 
-  private PersistentClass resolveAssociatedClass(
+  private @Nonnull PersistentClass resolveAssociatedClass(
       HibernateToManyProperty property, Map<?, ?> persistentClasses) {
     return Optional.ofNullable(property.getHibernateAssociatedEntity())
         .map(
-            referenced -> {
-              PersistentClass associatedClass =
-                  (PersistentClass) 
persistentClasses.get(referenced.getName());
-              if (associatedClass == null) {
-                throw new MappingException(
-                    "Association references unmapped class: " + 
referenced.getName());
-              }
-              return associatedClass;
-            })
-        .orElse(null);
+            referenced -> (PersistentClass) 
persistentClasses.get(referenced.getName()))
+        .orElseThrow(() -> new MappingException("Association [" + 
property.getName() + "] has no associated class"));
   }
 
   private void bindOrderBy(
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy
index d4501b62a3..9a4ee671f9 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy
@@ -109,16 +109,30 @@ class CollectionSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
         collection.getOrderBy() == null
     }
 
-    def "test resolveAssociatedClass throws MappingException when class is 
unmapped"() {
+    def "resolveAssociatedClass throws MappingException when property has no 
associated entity"() {
+        given:
+        def property = 
createTestHibernateToManyProperty(CSPBTestEntityWithMany, "items") as 
HibernateToManyProperty
+        def spiedProperty = Spy(property)
+        spiedProperty.getHibernateAssociatedEntity() >> null
+
+        when:
+        binder.resolveAssociatedClass(spiedProperty, [:])
+
+        then:
+        def ex = thrown(org.hibernate.MappingException)
+        ex.message.contains("items")
+    }
+
+    def "resolveAssociatedClass throws MappingException when associated class 
is not in persistentClasses"() {
         given:
         def property = 
createTestHibernateToManyProperty(CSPBTestEntityWithMany, "items") as 
HibernateToManyProperty
-        def persistentClasses = [:] // Empty map, so CSPBAssociatedItem will 
be missing
 
         when:
-        binder.resolveAssociatedClass(property, persistentClasses)
+        binder.resolveAssociatedClass(property, [:])
 
         then:
-        thrown(org.hibernate.MappingException)
+        def ex = thrown(org.hibernate.MappingException)
+        ex.message.contains("items")
     }
 
     def "test resolveAssociatedClass returns associatedClass"() {

Reply via email to