Как мне сделать запрос в Groovier Way? - PullRequest
1 голос
/ 06 января 2012

У меня есть User класс, который имеет поле type, которое, в свою очередь, является списком.

Так что type может выглядеть следующим образом: ["a","b"]

У меня есть другой список, скажем search как ["c","b"] (это предопределено)

Теперь я хочу найти все мои User экземпляры, чтобы я мог найти пользователей type, совпадающих с любым из элементов search.

.частичное решение:

def newQ = User.findAllByUsernameIsNotNull()
newQ.each { eachIndex ->
                    query = eachIndex.type
                    result = query.findAll { it == "c" }
                    if(result.size() > 0 )
                    {
                        ans << eachIndex.username
                    }
                  }

Приведенный выше код работает, в списке ans есть все User, которые удовлетворяют моему условию.Но вы можете ясно видеть, что в строке query.findAll я выполняю поиск только одного элемента из search.Я хочу выполнить поиск для всех элементов search по query (то есть поле User type).

Как мне этого добиться?Кроме моего решения, есть ли простой способ сделать это?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Вы можете сделать что-то вроде:

def ans = []
search.each{s->
    ans += User.findAll("from User u where u.username is not null and ? in elements(u.type)",[s])
}

Я не могу придумать, как это сделать в одном запросе

0 голосов
/ 06 января 2012

При поиске вы хотите заходить в базу данных как можно реже, поскольку это, как правило, самые дорогие операции.Если User.withCriteria {..} работает, я бы использовал это (я не так хорошо знаком с .withCriteria {}).Это также будет работать, если вы все еще хотите использовать динамические искатели, поскольку mockDomain не работает с HSQL (опять же, не уверен, что .withCriteria {} работает с mockDomain).

def search = ["c", "b"]
def users = User.findAllByUsernameIsNotNull()
users = users.findAll {it.type.intersect(search)}
0 голосов
/ 06 января 2012
User.withCriteria {
  isNotNull("username")
  'in' ("type", search)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...