gpt4 book ai didi

hibernate - 包含自身的 Grails 域类

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

我正在尝试在 Grails 中实现子页面域类,并且我希望有可能存储另一个子页面的子页面。我正在阅读 thisthis发布,但这些解决方案似乎都不适合我。

我的课看起来像这样:

class Subpage implements Comparable{

String title
Integer orderOfSubpage
SortedSet subpageChild

static hasMany = [component: Component, subpageChild: Subpage]
static belongsTo = [domain: Domain, subpageParent: Subpage]

static constraints = {
orderOfSubpage nullable:false;
subpageParent nullable:true;
subpageChild nullable:true;
}

@Override
public int compareTo(Object o) {
if (this.orderOfSubpage > o.orderOfSubpage) {
return 1;
} else if (this.orderOfSubpage < o.orderOfSubpage) {
return -1;
}
return 0;
}
}

根据实现,我期待 Hibernate 创建带有子项的附加表,但我查看了数据库,关于子页面的子页面的唯一“提及”是 SUBPAGE 表中的 SUBPAGE_PARENT_ID 列。使用这样的解决方案,我想我将不得不遍历整个表来获取所有 child (或者我错过了一些东西......)。

言归正传:我如何实现这一点才能获得一个有可能获得所有 child 的子页面类?

提前致谢。

最佳答案

我已经获取了您的域并修改了一些内容。为简洁起见,我省略了 compareTo 方法。请注意 SortedSet subpageChild不需要。它已经是一个 SortedSet。我还把它重命名为 subpageChildren因为它应该是复数。

class Subpage implements Comparable{

String title
Integer orderOfSubpage

static hasMany = [component: Component, subpageChildren: Subpage]
static belongsTo = [domain: Domain, subpageParent: Subpage]

static constraints = {
orderOfSubpage nullable:false;
subpageParent nullable:true;
subpageChild nullable:true;
}
}

所以让我们看一些代码:
def subpage = new Subpage(title: "Subpage 1", orderOfSubpage: 1)
def child1 = new Subpage(title: "Subpage child 1", orderOfSubpage: 1)
def child2 = new Subpage(title: "Subpage child 2", orderOfSubpage: 2)
subpage.addToSubpageChildren(child1)
subpage.addToSubpageChildren(child2)
subpage.save()

我们创建了一个包含 2 个子页面的子页面。现在,让我们看看查询是什么样的:
def subpage = Subpage.findByTitle("Subpage 1")

现在,让我们遍历它的 child
subpage.subpageChildren.each { child ->

}

基本上就是这样。只需要一张 table 。

关于hibernate - 包含自身的 Grails 域类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984925/

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