我有一个名为Planning的域,其中包含hasMany另一个包含Employee的域。我正在尝试查找所有这些计划,其中这些计划包含特定的员工,但我无法使其正常工作。
我正在尝试这样做,我的打印语句确实将contains
打印为真
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发生一些奇怪的行为。
答案 0 :(得分:1)
闭包必须返回<div align="center">
值-请参见http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Collection.html#findAll(groovy.lang.Closure)
这应该有效(未经测试):
boolean
顺便说一句:我不会将过滤后的列表分配给原始 plannings = plannings.findAll{planning-> planning.employees?.contains(employee)}
列表。提取一个新的表达变量,例如plannings
或类似的变量。
答案 1 :(得分:1)
没有关于您的问题的更多相关详细信息(奇怪的行为是什么?日志跟踪?休眠映射?等),我们所能做的只是推测;如果必须这样做,我很可能会这样说:
employee
对象是一个分离的对象。employee
对象不会有意义地覆盖equals
和hashCode
employee
与employees
内的persisted planning.employees.contains(employee)
(使用planning
)进行比较>
在这些情况下,即使比较可能代表相同的对象,它们也永远不会是正确的。如果是这种情况,您必须:
employee
对象进行比较。equals
and hashCode
在语义上对Employee
有意义希望这会有所帮助。