Grails 域对象 hasMany 使用包含的不规则行为

标签 grails groovy grails-orm

我在调用 .contains() 时遇到问题在我的一个域类的 hasMany 上在正常运行或调试时,关系不一样。情况如下:

我有 2 个域对象,AB . A有一个 hasManyB 的关系.

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 , hashCodecompareTo试图解决这个问题,但行为相同。

最佳答案

这通常是由于延迟加载或缓存。使用instanceOfA.bees.id.contains(user.instanceOfB.id)它总是有效的。

关于Grails 域对象 hasMany 使用包含的不规则行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18597038/

相关文章:

grails - 如何转换Grails中的日期?

mysql - Grails H2 数据库 DbConsole - 数据库备份

scala - 如何将Scala,Groovy和Java代码与Gradle结合使用?

regex - Groovy:转义任意(未知)正则表达式

hibernate - 如何使用 GORM 和 Hibernate 将 List<String> 持久保存到单列中?

mongodb - 通过 Grails 域标准在事件光标中发现 Mongo CursorNotFound 异常

java - 使用 Maven\issues with Nexus 调试 Grails 命令 "refresh-dependencies"

groovy - 使用 groovy 在每第 n 个字符后插入一个字符

grails - 从groovy中的子表中删除记录

grails - 更改 [hasMany :] reference to a list?