Вопрос новичка о Граале "createCriteria" - PullRequest
1 голос
/ 03 июня 2011

Я новичок в построении критериев Грааля, может кто-нибудь объяснить, что означает следующее?

def c = Account.createCriteria()
         def results = c {

             like("holderFirstName", "Fred%")
             and {
                 between("balance", 500, 1000)
                 eq("branch", "London")
             }
             maxResults(10)
             order("holderLastName", "desc")
         }

Означает ли это

  • Select * from account where holderFirstName like 'fred%' and (balance between 500 and 1000 **and** branch='london ')
  • Select * from account where holderFirstName like 'fred%' and (balance between 500 and 1000 **or** branch='london)

Если я хочу использовать «или» и «и» вместе, как мне это сделать?

Ответы [ 2 ]

8 голосов
/ 03 июня 2011

Ваш пример будет выглядеть так:

select * from account 
where holderFirstName like 'Fred%' 
and balance between 500 and 1000 
and branch = 'London'

Все условия верхнего уровня подразумеваются как AND'ы вместе.Вы можете создать те же критерии, что и:

def c = Account.createCriteria()
def results = c {
    like("holderFirstName", "Fred%")
    between("balance", 500, 1000)
    eq("branch", "London")
    maxResults(10)
    order("holderLastName", "desc")
}

. Для получения второго запроса используйте следующие критерии:

def c = Account.createCriteria()
def results = c {
    like("holderFirstName", "Fred%")
    or {
        between("balance", 500, 1000)
        eq("branch", London")
    }
    maxResults(10)
    order("holderLastName", "desc")
}

Вложите свои and / or замыкания для более сложных критериев.

2 голосов
/ 03 июня 2011

Ваши текущие критерии означают «и» в двух условиях баланса и отрасли. так

Выберите * из учетной записи, где holderFirstName, например, 'fred%' и (баланс между 500 и 1000 и branch = 'london'), является правильным, просто он будет содержать максимум 10 результатов и будет отсортирован на основание "holderLastName" в порядке убывания.

Чтобы использовать и и или вместе, вам также необходимо указать блок или в критериях, чтобы ваши критерии выглядели как

Account.createCriteria()
         def results = c {

             like("holderFirstName", "Fred%")
             and {
                 between("balance", 500, 1000)
                 eq("branch", "London")
             }
             or{
                 eq("prop1", prop1)
                 eq("prop2",prop2)
             }
             maxResults(10)
             order("holderLastName", "desc")
         }

в этом критерии есть и между условиями баланса и филиала. а также или между prop1 и prop2

...