gpt4 book ai didi

hibernate - Grails - 将多对多父/子关系映射到单个连接表

转载 作者:行者123 更新时间:2023-12-05 00:00:40 26 4
gpt4 key购买 nike

我的问题基于以下(简化的)Grails 域类

class Dimension {

String name

static hasMany = [
children: Dimension,
parents: Dimension
]
}

有没有办法将多对多父/子关系映射到单个连接表?

最佳答案

据我所知,唯一的方法是到 创建另一个域类 表示父子关系。

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永远是 child 。通过指定 all-delete-orphan在映射中,我们确保在删除 parentDependency 时来自一个 child ,相关的 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
}

我已经使用这种方法有一段时间了,到目前为止没有遇到任何问题。

关于hibernate - Grails - 将多对多父/子关系映射到单个连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9782999/

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