据我所知,唯一的方法就是 创建另一个 表示父子关系的 域类 。
class DimensionDependency { Dimension parent Dimension child static belongsTo = Dimension}class Dimension { static hasMany = [parentDependencies: DimensionDependency] static mappedBy = [parentDependencies: 'child'] static mapping = { parentDependencies cascade: 'all-delete-orphan' }}该
mappedBy关键字指定对象指的一个
DimensionDependency是永远的孩子。通过
all-delete-orphan在映射中指定,我们确保
parentDependency从子级删除a时,
DimensionDependency将从数据库中删除关联的对象。
您还可以在
Dimension类中添加便捷方法来封装上的操作
DimensionDependencies,以使界面更像GORM。
static transients = ['children', 'parents'] Set<Dimension> getChildren() { AssignmentDependency.findAllByParent(this).child } Set<Dimension> getParents() { parentDependencies?.parent ?: [] } Dimension addToParents(Dimension parent) { if (!parentDependencies.find { it.parent == parent && it.child == this }) { addToParentDependencies(new DimensionDependency(parent: parent, child: this)) } return this } Dimension removeFromParents(Dimension parent) { def dep = parentDependencies.find { it.parent == parent } removeFromParentDependencies(dep) dep.delete(flush: true) return this }我使用这种方法已有一段时间了,到目前为止没有遇到任何麻烦。



