【问题标题】:Groovy/Grails: Filtering with `findAllBy ... InList` as case insensitiveGroovy/Grails:使用 `findAllBy ... InList` 过滤不区分大小写
【发布时间】:2017-09-15 09:00:08
【问题描述】:

我有一个查询,它从给定列表中的 Person 域中搜索名称并检索结果,但它区分大小写。

List<Person> persons = Person.findAllByNameInList(personsDto*.name)

我想要的是搜索人名 不区分大小写。我该如何使用findAllcreateCriteriasqlRestriction 或任何其他方式来做到这一点?

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

    这段代码应该适合你,

      List searchList = personsDto*.name // considering this as a list
        List<Person> persons = Person.withCriteria {
          or {
            searchList.each { name ->
              // iLike will search result for both Cases
              ilike('property', "%$name%")
            }
          }
      }
        //printing list dump
        Println persons.dump()
    

    【讨论】:

    • 此解决方案有效。但是,它不是高性能的。它遍历所有项目并比较名称。如果你有更好的解决方案,我很乐意接受。谢谢。
    • 如果您必须为此执行查询,您可以使用带有条件的 grails 执行“in”查询,或者使用简单的 SQL 查询,比较列表本身不是一个好习惯,如果您的列表包含大量数据,您需要在 SQL 级别执行与迭代中几乎相同的处理,如果您的列表内容有限,这还不错。
    • " 它不是高性能的。它遍历所有项目并比较名称。" - 需要明确的是,它会遍历 personDto 中的所有名称,但不会遍历数据库中的所有 Person 实例。我想你可能已经知道了,但只是澄清一下。
    • @JeffScottBrown 感谢您的澄清。我很高兴收到您的评论。我是一个大粉丝。您对如何执行此操作有更好的建议,还是您认为建议的解决方案是最好的?
    • @jeffScottBrown 感谢您的澄清,但在 grails 中没有找到任何 finder 方法用于这种组合,但这可以通过 SQL 查询,我们可以通过 grails executeQuery 来克服这个缺点。跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2013-10-24
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多