This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch merge-hibernate6 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit a1a8bb37c131089f1aa286f090438d8acc216c68 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Fri Sep 5 21:12:03 2025 -0500 Find in list association entities --- .../org/grails/orm/hibernate/query/PredicateGenerator.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java index c36493a11b..275254c78d 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java @@ -10,6 +10,8 @@ import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; import jakarta.persistence.criteria.Subquery; + +import org.grails.datastore.gorm.GormEntity; import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria; import org.grails.datastore.mapping.core.exceptions.ConfigurationException; import org.grails.datastore.mapping.model.PersistentEntity; @@ -29,7 +31,9 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.OffsetDateTime; import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -184,6 +188,13 @@ public class PredicateGenerator { } return cb.not(value); } else if (criterion instanceof Query.In c && !c.getValues().isEmpty()) { + boolean areGormEntities = c.getValues().stream().allMatch(GormEntity.class::isInstance); + if (areGormEntities) { + List<GormEntity> gormEntities = new ArrayList<>(c.getValues()); + Path id = criteriaQuery.from(gormEntities.get(0).getClass()).get("id"); + Collection newValues = gormEntities.stream().map(GormEntity::ident).toList(); + return cb.in(id, newValues); + } return cb.in(fromsByProvider.getFullyQualifiedPath(c.getProperty()), c.getValues()); } else if (criterion instanceof Query.NotIn c) { return cb.not(cb.in(fromsByProvider.getFullyQualifiedPath(c.getProperty()), c.getValue()));
