У меня возникли проблемы с получением результатов, которые я хочу, используя построитель критериев. Допустим, у меня есть объект домена User
, у которого есть Company
. Теперь я хочу выполнить поиск с пейджингом:
def c = User.createCriteria()
def results = c.list(max: max, offset: offset) {
or {
ilike("name", someSearchTerm)
ilike("username", someSearchTerm)
company {
ilike("name", someSearchTerm)
}
}
}
Это привело к использованию внутреннего соединения с ассоциацией, что привело меня к следующему:
def c = User.createCriteria()
def results = c.list(max: max, offset: offset) {
createAlias("company", "c", CriteriaSpecification.LEFT_JOIN)
or {
ilike("name", someSearchTerm)
ilike("username", someSearchTerm)
ilike("c.name", someSearchTerm)
}
}
Теперь это работает отлично. Однако это приводит меня к первому вопросу. CriteriaSpecification.LEFT_JOIN
устарел. Чем его следует заменить?
Кроме того, часть пейджинга должна учитывать порядок. В документации четко указано, что я могу сделать:
def c = User.createCriteria()
def results = c.list(max: max, offset: offset) {
createAlias("company", "c", CriteriaSpecification.LEFT_JOIN)
or {
ilike("name", someSearchTerm)
ilike("username", someSearchTerm)
ilike("c.name", someSearchTerm)
}
order("someAttribute", "asc")
}
но это приводит к ошибке, утверждающей, что order
не может принимать String, String
в качестве аргументов. Есть идеи?
ОБНОВЛЕНИЕ
Я нашел проблему. У меня была объявленная ранее переменная под названием order, которую я использовал, и замыкание пыталось использовать ее вместо метода критериев.