我正在尝试在Grails中实现Subpage域类,我希望Subpage可以存储另一个子页面。我正在阅读this和this帖子,但这些解决方案似乎都不适合我。
我的班级看起来像这样:
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列。使用这样的解决方案,我不得不迭代整个表来获得所有孩子,我猜(或者我想念一些东西......)。
说到这一点:我如何实现这一点以获得一个可以让所有孩子获得的Subpage课程?
提前致谢。
答案 0 :(得分:2)
我已经采取了你的域并修改了一些东西。为简洁起见,省略了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")
现在,让我们迭代它的孩子
subpage.subpageChildren.each { child ->
}
基本上就是这样。只需要一张桌子。
答案 1 :(得分:1)