gpt4 book ai didi

grails - 如何为指定条件固定GORM查询的list方法返回的列表的totalCount?

转载 作者:行者123 更新时间:2023-12-02 16:02:13 30 4
gpt4 key购买 nike

我从GORM查询的列表函数返回的列表的totalCount属性得到了错误的结果。

我认为这是由于它还包含重复结果的问题。列表中返回的结果是正确的,但计数似乎是错误的。

我该如何解决?

我尝试了以下操作,但不起作用:

trace.setResultTransformer(CriteriaSpecification.PROJECTION)

以下是我的GORM查询:
    def trace = Trace.createCriteria()

def results = trace.list(max:max, offset:offset) {
createAlias('module','mod', CriteriaSpecification.LEFT_JOIN)
createAlias('symbol','sym', CriteriaSpecification.LEFT_JOIN)
createAlias('fault', 'fault',CriteriaSpecification.LEFT_JOIN)
createAlias('fault.report', 'report', CriteriaSpecification.LEFT_JOIN)
createAlias('fault.tgmap', 'tg', CriteriaSpecification.LEFT_JOIN)
createAlias('tg.traceGroup16','tr', CriteriaSpecification.LEFT_JOIN)
projections
{
property('fault.id')
property('tr.geckId')
property('report.email')
property('fault.ver')
property('fault.shortOs')
property('fault.faultDate')
property('frameNumber')
property('mod.module')
property('sym.symbol')
groupProperty 'fault.pid'
groupProperty 'report.file'
}
// Handle Unknown module case
if (module.length() > 0 && symbol.length() > 0 && module != symbol)
{
and
{
like('mod.module', '%' + module + '%')
like('sym.symbol', '%' + symbol + '%')
}

}
else if (module.length() > 0 && symbol.length() > 0 && module == symbol)
{
or
{
like('mod.module', '%' + module + '%')
like('sym.symbol', '%' + symbol + '%')
}
}
else if (module.length() > 0)
{
like('mod.module', '%' + module + '%')
}
else if (symbol.length() > 0)
{
like('sym.symbol', '%' + symbol + '%')
}
order("fault.faultDate", "desc")
}

最佳答案

这是一个非常烦人的问题-您可以使用distinct投影过滤掉重复项,但是您会发现分页变得混乱。通常,我最终会得到这样的方法:

  • 使用countDistinct进行查询以获取totalCount
  • 使用distinct('id')投影
  • 再次查询以获取一系列行(例如第1至10行)的唯一ID
  • 创建一个PagedResultList实例,然后使用DomainClass.getAll(ids)再次查询
  • 在您的totalCount上设置DomainClass.getAll(ids)和从PagedResultList返回的列表

  • 您可以在出色的 Filter PaneQuick Search插件中看到一些使用此方法的示例。

    这不是理想的方法,但是它确实可以工作,并且在大多数情况下,执行4个查询(而不是2个)对性能的影响不是很严重。

    关于grails - 如何为指定条件固定GORM查询的list方法返回的列表的totalCount?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29322671/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com