我在调用 .contains()
时遇到问题在我的一个域类的 hasMany
上在正常运行或调试时,关系不一样。情况如下:
我有 2 个域对象,A
和 B
. A
有一个 hasMany
与 B
的关系.
class A {
...
static hasMany = [bees: B]
...
}
现在,在执行我的一个过滤器期间,我从 spring 安全服务中获取了我当前的用户。此用户还包含
B
的单个实例.我的过滤器应该做的是检查 B
的实例是否在用户中包含 A
的某些实例.假设
B
的实例实际上指的是同一个对象(因为它们是)。现在,问题出现了。来电:
if (instanceOfA.bees.contains(user.instanceOfB)) {
println 'success'
} else {
println 'failure'
}
打印
failure
在正常(或不单步执行代码的调试)执行期间。但是,如果我在此处设置断点并单步执行代码,它会正确执行 contains()
并打印 success
.我也实现了
equals
, hashCode
和 compareTo
试图解决这个问题,但行为相同。
最佳答案
这通常是由于延迟加载或缓存。使用instanceOfA.bees.id.contains(user.instanceOfB.id)
它总是有效的。
关于Grails 域对象 hasMany 使用包含的不规则行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18597038/