gpt4 book ai didi

grails - 如何使Groovy/Grails返回对象列表而不是对象列表?

转载 作者:行者123 更新时间:2023-12-04 13:20:26 25 4
gpt4 key购买 nike

我有一个这样的课:

class Foo {
static hasMany = [bars: Bar]
}

当我写的时候:
Foo.getAll()

我得到了像这样的 Foo对象的列表:
[ Foo1, Foo2, Foo3 ]

当我写的时候:
Foo.getAll().bars

我得到像这样的 Bar对象列表的列表:
[ [ Bar1, Bar2 ], [ Bar2, Bar3 ], [ Bar1, Bar4 ] ] 

但是我想要的是 Bar对象的唯一列表,如下所示:
[ Bar1, Bar2, Bar3, Bar4 ]

我的最终目标是在上面的列表中具有 Bar对象的ID的唯一列表,如下所示:
[ 1, 2, 3, 4 ]

我已经尝试过 collect方法的各种变体,也曾经尝试过 spread operator,但是我没有任何运气。

最佳答案

对于通用的Groovy类(即非GORM类),David是正确的,最好使用flattenunique

但是,在您的示例中,您似乎正在以多对多关系使用GORM域对象(否则,您将不需要唯一性约束)。

对于域类,最好使用HQL或标准一步完成。另一个优点是为其生成的SQL效率更高。

这是HQL,用于获取与多对多关系中的任何Bar相关的唯一Foo id:

Bar.executeQuery("select distinct b.id from Foo f join f.bars b")

其标准如下所示:
Foo.withCriteria {
bars {
projections {
distinct("id")
}
}
}

使用这种方法的一个“问题”是,单元测试和 Criteria queries with join table projections are broken in 2.0.4 unit tests不支持HQL。因此,围绕此代码的任何测试都将需要模拟或使用集成测试。

关于grails - 如何使Groovy/Grails返回对象列表而不是对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com