Имея случай, когда область была собственностью себя, как показано ниже:Grails домен класс множественного циклическая ссылка вопрос
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'. См. Https://grails.github.io/grails-doc/latest/ref/Domain%20Classes/mappedBy.html. – defectus
Я тоже пытался с mappedBy, но напрасно. –
Приятно видеть, что я был прав (угадывая, что вы принимаете ответ, предполагающий использование свойства mappedBy) :-) – defectus