如何使用grails createCriteria在hibernate条件中编写嵌套的AND和OR块

时间:2011-07-26 15:55:06

标签: hibernate grails criteria hibernate-criteria

我尝试将以下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,结果不是corect,因为不允许每个OR多个AND!

结果是(对于我的数据):

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

结果应该是(对于我的数据):

textOrders.size() == textOrders.totalCount

任何解决此问题或解决方法的想法?怎么可能是结果的大小大于totalCount? 我为此添加了一个jira问题:http://jira.grails.org/browse/GRAILS-7783

1 个答案:

答案 0 :(得分:0)

抱歉,我不能将此作为评论发布(不允许!),但您可以尝试设置

loggingSql = true
在config.groovy的datasource块中标记

并发布或检查SQL hibernate正在生成?这可能会为您提供有关正在发生的事情的线索。

谢谢,

吉姆。