Grails的版本:3.0.7的Grails和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
您应该保存之前剥去不需要的空格。你的邮政编码或通过后台工作,所有其他方法会导致查询更加复杂,并导致更差的搜索性能 – injecteer
@injecteer好点,我已经删除了DB中现有条目中的空白并实现了一个setter在域类中删除任何空格以及将字母转换为大写 –