Как записать вложенные блоки И и ИЛИ в критерии гибернации с помощью grails createCriteria - PullRequest
0 голосов
/ 26 июля 2011

Я пытался написать следующий SQL-оператор в качестве критерия:

SELECT * FROM foo WHERE (a=1 AND b=1) OR (a=2 AND b=2) OR (a=3 AND b=4)

def textOrderCriteria = TextOrder.createCriteria()
textOrders = textOrderCriteria.list(max: 20, offset: 0) {
  or {
    and {
      eq('a',1)
      eq('b',1)
    }
    and {
      eq('a',2)
      eq('b',2)
    }
    and {
      eq('a',3)
      eq('b',4)
    }
  }
}

но это нарушает totalCount, и результат не является базовым, потому что не допускается более одного AND на OR!

Результат (по моим данным):

textOrders.size() == 6
textOrders.totalCount == 2

Результат должен быть (для моих данных):

textOrders.size() == textOrders.totalCount

Есть идеи, чтобы это исправить или обойти? Как могло случиться, что размер результата больше, чем totalCount? Для этого я добавил проблему с jira: http://jira.grails.org/browse/GRAILS-7783

1 Ответ

0 голосов
/ 09 августа 2011

Извините, я не могу опубликовать это как комментарий (пока не разрешено!), Но вы можете попробовать установить

loggingSql = true

флаг в блоке источника данных вашего config.groovy и отправка или проверка SQL спящего режима генерирует? Это может дать вам ключ к пониманию того, что происходит.

Спасибо

Джим.

...