gpt4 book ai didi

grails - 如何计算gorm中一对多关系中出现的次数-Grails

转载 作者:行者123 更新时间:2023-12-02 14:38:38 25 4
gpt4 key购买 nike

我有2个 Realm 类(class)

class A {
....
static hasMany = [bs:B]
}
class B {
int code
....
}

如何在所有A表中列出B中所有代码的出现次数?

就像是
b.each { thisb ->
int ocurrences = A.bs.findAll{it == thisb}.size()
...
}

谢谢

最佳答案

我认为我对此问题有些困惑的原因是,从技术上讲,这实际上是多对多关系,而不是真正的一对多关系。 Grails会为此关系创建一个联接表(“a_b”)(因为B与A没有belongsTo关系)。

您使用A域构造hasMany关系的方式是一个集合,因此B仅在“bs”集合中出现一次。所以,我相信,您要问的是B有多少个。

如果是这样,您可以使用HQL回答您的问题(也可以使用条件构建器,但我更喜欢hql)。这是一个示例(使用build-test-data插件通过buildLazy构造对象并向A添加字符串名称):

def a1 = A.buildLazy(name: "one")
def a2 = A.buildLazy(name: "two")
def a3 = A.buildLazy(name: "three")
def a4 = A.buildLazy(name: "four")

def b1 = B.buildLazy(code: 888)
def b2 = B.buildLazy(code: 999)

a1.addToBs(b1)
a2.addToBs(b1)
a3.addToBs(b1)
a4.addToBs(b1)

a1.addToBs(b2)

println "Number of As that have each B = " +
A.executeQuery("select count(b), b.code from A as a join a.bs as b group by b.code")

println "Number of As with a specific B = " +
A.executeQuery("select count(*) from A as a join a.bs as b where b = :b", [b: b1])

结果是:
Number of As that have each B = [[1, 999], [4, 888]]
Number of As with a specific B = [4]

关于grails - 如何计算gorm中一对多关系中出现的次数-Grails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2705880/

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