Only ignore case sort if the property can be found. Fixes #594 (#596)
diff --git a/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java b/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java
index ac3c96d..d3ee177 100644
--- a/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java
+++ b/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java
@@ -272,11 +272,12 @@
String sort,
String order,
boolean ignoreCase) {
- if (ignoreCase && entity.getPropertyByName(sort).getType() != String.class) {
- ignoreCase = false;
- }
int firstDotPos = sort.indexOf(".");
if (firstDotPos == -1) {
+ PersistentProperty property = entity.getPropertyByName(sort);
+ if (ignoreCase && property != null && property.getType() != String.class) {
+ ignoreCase = false;
+ }
addOrder(entity, query, queryRoot, criteriaBuilder, sort, order, ignoreCase);
} else { // nested property
String sortHead = sort.substring(0, firstDotPos);
@@ -284,6 +285,10 @@
PersistentProperty property = entity.getPropertyByName(sortHead);
if (property instanceof Embedded) {
// embedded objects cannot reference entities (at time of writing), so no more recursion needed
+ PersistentProperty associatedProperty = ((Embedded<?>) property).getAssociatedEntity().getPropertyByName(sortTail);
+ if (ignoreCase && associatedProperty != null && associatedProperty.getType() != String.class) {
+ ignoreCase = false;
+ }
addOrder(entity, query, queryRoot, criteriaBuilder, sort, order, ignoreCase);
} else if (property instanceof Association) {
Association a = (Association) property;