【发布时间】:2015-08-07 06:29:50
【问题描述】:
有一个域一直是其自身属性的情况,如下所示:
Group{
String name
Role role
static belongsTo=[boss:Group]
static hasMany=[children:Group,supporters:Group]
}
static constraint={
boss nullable:true
supporters validator: {supporters, group->
supporters?.each {Group supplier ->
if(!(supporters.role == Role.OPS)){
return "domain.not.supporters.object"
}
}
return true
}
}
}
Role{
MANAGER,LEADER,DEVELOPERS,OPS
}
以上支持者的角色是 OPS,我们也为其添加了验证。总体支持者不属于原始Manager>Leader>Developer hierarchy。
现在,当我创建一些儿童组对象时说MANAGER_RAD > LEAD_BAD ->( DEV_JACK and DEV_MOHAN),并且支持者只提供给经理。下面的代码将使您理解该场景:
Group manager = new Group(name:'MANAGER_RAD')
manager.addToSupporters(new Group(name:'OPS_BISK').save(flush:true))
manager.addToSupporters(new Group(name:'OPS_BAHADUR').save(flush:true))
Group lead = new Group(name:'LEAD_BAD').save(flush:true)
lead.addToChildren(new Group(name:'DEV_JACK').save(flush:true))
lead.addToChildren(new Group(name:'DEV_MOHAN').save(flush:true))
lead.save(flush:true)
manager.addToChildren(lead)
manager.save()
现在,当我们尝试按如下方式获取经理的孩子时(比如在我们的引导程序中):
Group manager = Group.findByName('MANAGER_RAD')
println "------Manager team members---->$manager.children"
println "------supporters for Manager---->$manager.supporters"
预期的输出是:
------Manager team members---->[LEAD_BAD(id:2)]
------supporters for Manager---->[OPS_BAHADUR(id:7),OPS_BISK(id:7)]
但是返回的输出是:
------Manager team members---->[LEAD_BAD(id:2),OPS_BAHADUR(id:7),OPS_BISK(id:7)]
------supporters for Manager---->[LEAD_BAD(id:2),OPS_BAHADUR(id:7),OPS_BISK(id:7)]
我怎样才能得到预期的输出。
任何帮助都是值得的。
【问题讨论】:
-
您可能缺少
mappedBy属性。见grails.github.io/grails-doc/latest/ref/Domain%20Classes/…。 -
我也尝试过 mappedBy,但没有成功。
-
很高兴看到我是对的(猜测你接受了建议使用
mappedBy属性的答案):-)
标签: java hibernate grails grails-orm grails-2.0