Grails Версия: 3.0.7Grails и Hibernate createCriteria igorning посреднического белого пространства как п
Groovy Версия: 2.4.4
JVM версия: 1.8.0_51
Я следующий запрос в служба grails, и мой вопрос заключается в том, как «игнорировать» пробел в середине значения поля, такого как почтовый индекс.
В качестве примера, желаемый результат состоит в том, что 'LL551RB' будет соответствовать в аналогичном предложении для 'LL55 1RB', хранящемся в базе данных. И наоборот, решение было бы простым, чтобы исключить пробел из значения запроса, но я не могу определить, как удалить его из значений базы данных.
Я пробовал варианты ниже, которые, пока они выполняются, не совпадают правильно.
def allRecordsMatched = Event.createCriteria().listDistinct {
or {
eventCategories {
like("categoryName", "%" + search + "%")
}
like("eventName", "%" + search + "%")
like("address.town", "%" + search + "%")
like("address.county", "%" + search + "%")
like("address.postalCode".replaceAll("\\s",""), "%" + search + "%")
}
order("startDateTime", "asc")
}
return [results, allRecordsMatched]
Вы можете переписать его в HQL и использования TRIM (FIELD) функции в нем (не уверен, что он работает в HQL, но в SQL это работает – Koloritnij
вы должны раздеться ненужные пробелы либо перед сохранением. ваш zip-код или фоновое задание. Все остальные методы приведут к большей сложности запроса и к худшей производительности поиска. – injecteer
@ injecteer Хорошая точка. Я удалил пробелы, хранящиеся в существующих записях в БД, и реализовал сеттер на класс домена, чтобы удалить любые пробелы, а также конвертировать буквы в верхний регистр. –