首页 > 解决方案 > Grails findAll没有在集合中找到值

问题描述

我有一个名为 Planning 的域,其中包含一个 hasMany 另一个名为 Employee 的域。我正在尝试查找所有这些计划,其中计划包含特定员工,但我无法让它发挥作用。

我正在尝试这样做,我的打印语句确实打印contains为 true

plannings = plannings.findAll{planning->
  if(employee) {
    log.info("find plannings with employee ${employee} ${planning.employees.contains(employee)}")
    planning.employees.contains(employee)
  }
}

我不会将其作为 Hibernate 查询来执行,因为这会以另一种奇怪的方式破坏应用程序。这段代码以某种原因执行,for each无论出于何种原因导致 Hibernate 出现一些奇怪的行为。

标签: grails

解决方案


闭包必须返回一个boolean值 - 请参阅http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Collection.html#findAll(groovy.lang.Closure)

这应该有效(未经测试):

 plannings = plannings.findAll{planning-> planning.employees?.contains(employee)}              

顺便说一句:我不会将过滤后的列表分配给原始plannings列表。提取一个新的表达变量 likeplaningsOfEmployee或类似的东西。


推荐阅读