我有一个域模型,其中OrgRoleInstance的hasMany = {sites:Site},而Site域实体的属点为= [org:OrgRoleInstance]
我不想在域对象中使用静态映射= {}子句,因为我想通过查询控制获取策略。
我设置了几个这样的单元测试,并分别设置了3个组织和一个站点
void "list with eager fetch query"() {
given :
def orgs = OrgRoleInstance.list(fetch:[sites:"eager"])
println "org b.sites : " + orgs[1].sites
println "site #2 has org as : " + (Site.list())[1].org
expect :
Site.count() == 3
orgs.size() == 3
orgs[1].getName() == "B"
orgs[1].sites.size() == 1
}
void "where query"() {
given :
def orgs = OrgRoleInstance.where {
name =~ "%B%" &&
sites{}
}.list()
expect : //actual get null in orgs
Site.count() == 3
orgs[0].name == "B"
orgs[0].sites.size() == 1
}
void "criteria query " () {
given:
OrgRoleInstance org
org = OrgRoleInstance.withCriteria (uniqueResult: true) {
//eq 'name', "B"
and {
idEq(2)
eq ('name', "B")
}
}
def orgs = OrgRoleInstance.withCriteria {
eq 'name', "B"
//fetchMode 'sites', FetchMode.SELECT
sites{}
}
orgs
expect: //actual sites is size=0
org.id == 2
org.sites.size() == 1
}
我在做什么错-中间测试从查询返回null,其他测试返回OrgRoleInstance,但sites属性为“空”。
我已经检查了设置,站点已正确保存,并在那里引用了org-因此域模型是正确的。
编写这些查询时我在做什么错?
PS我从多个方面尝试了where查询,这似乎可以正常工作并在结果中加载父网站。
//this one works
void "where query from the many side "() {
given :
def site = Site.where {
org.id == 2
}.list()
expect :
Site.count() == 3
site.org.name == ["B"]
}
答案 0 :(得分:0)