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 f20ed48226cb383a2d7f82e28cdbfed0dbf6f0d1 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sat Jun 28 19:00:41 2025 -0400 Fixed relationship in Entities --- .../orm/hibernate/query/AbstractHibernateQuery.java | 17 +++++++++++------ .../grails/orm/hibernate/query/PredicateGenerator.java | 2 ++ .../gorm/specs/hibernatequery/HibernateQuerySpec.groovy | 2 +- .../grails/data/testing/tck/domains/Person.groovy | 1 + 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/AbstractHibernateQuery.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/AbstractHibernateQuery.java index f774635904..a3e6de0445 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/AbstractHibernateQuery.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/AbstractHibernateQuery.java @@ -501,11 +501,11 @@ public abstract class AbstractHibernateQuery extends Query { assignOrderBy(cq, tablesByName); assignCriteria(cq, cb, root,tablesByName); - org.hibernate.query.Query query = getSessionFactory() - .getCurrentSession() - .createQuery(cq) - .setFirstResult(this.offset) - .setHint("org.hibernate.cacheable", queryCache);; + org.hibernate.query.Query query = createQuery(cq); + if (this.offset > 0) { + query.setFirstResult(this.offset); + } + query.setHint("org.hibernate.cacheable", queryCache);; if (this.max > -1) { query.setMaxResults(this.max); } @@ -518,6 +518,11 @@ public abstract class AbstractHibernateQuery extends Query { return query; } + public org.hibernate.query.Query<?> createQuery(JpaCriteriaQuery<?> cq) { + return getSessionFactory() + .getCurrentSession() + .createQuery(cq); + } @SuppressWarnings("unchecked") @@ -680,7 +685,7 @@ public abstract class AbstractHibernateQuery extends Query { return ((IHibernateTemplate) session.getNativeInterface()).getSessionFactory(); } - private HibernateCriteriaBuilder getCriteriaBuilder() { + public HibernateCriteriaBuilder getCriteriaBuilder() { return getSessionFactory().getCriteriaBuilder(); } 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 f1c09f5272..837dea451a 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 @@ -83,6 +83,8 @@ public class PredicateGenerator { return cb.isNotNull(fromsByProvider.getFullyQualifiedPath(c.getProperty())); } else if (criterion instanceof Query.IsEmpty c) { return cb.isEmpty(fromsByProvider.getFullyQualifiedPath(c.getProperty())); + } else if (criterion instanceof Query.IsNotEmpty c) { + return cb.isNotEmpty(fromsByProvider.getFullyQualifiedPath(c.getProperty())); } else if (criterion instanceof Query.Equals c) { return cb.equal(fromsByProvider.getFullyQualifiedPath(c.getProperty()), c.getValue()); } else if (criterion instanceof Query.NotEquals c) { diff --git a/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/hibernatequery/HibernateQuerySpec.groovy b/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/hibernatequery/HibernateQuerySpec.groovy index 614daf4c0a..d58101a3fa 100644 --- a/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/hibernatequery/HibernateQuerySpec.groovy +++ b/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/hibernatequery/HibernateQuerySpec.groovy @@ -52,7 +52,7 @@ class HibernateQuerySpec extends HibernateGormDatastoreSpec { def equalsJoins() { given: new Person(firstName: "Fred", lastName: "Rogers", age: 51).save(flush: true) - oldBob.addToPets(new Pet(name: "Lucky")).save(flush:"true") + new Pet(name: "Lucky", age: 1, owner: oldBob).save(flush: true) hibernateQuery.join("pets").eq("pets.name", "Lucky") when: def newBob = hibernateQuery.singleResult() diff --git a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/domains/Person.groovy b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/domains/Person.groovy index f14720c1ed..5ca95b3cd2 100644 --- a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/domains/Person.groovy +++ b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/domains/Person.groovy @@ -70,6 +70,7 @@ class Person implements Serializable, Comparable<Person>, AsyncEntity<Person> { firstName index: true lastName index: true age index: true + pets cascade: 'all-delete-orphan' } static constraints = {
