Grails域自引用递归调用

时间:2013-05-24 12:45:23

标签: grails recursion groovy gorm

这是我的域类:

class Category {
    String name

    static hasMany = [subCategories: Category]
    static belongsTo = [parentCategory: Category]

    static mapping = {
        subCategories joinTable: false, column: "parent_id"
    }

    static constraints = {
        parentCategory nullable: true
    }}

类别是一个域类,可以自我引用父项和子项列表。

现在我想要这样的东西:给定父类别ID,我想要一个属于这个id的所有子类别的列表。 (注意:不是直接的孩子,所有的孩子都是id)

例如,id 1有子项2和3,而2有子4和5。

鉴于我从客户端获得了类别ID 1,我想要一个id为2,3,4,5

的子类别

利用Groovy,实现它的最佳代码是什么?

1 个答案:

答案 0 :(得分:4)

未经测试的代码,但可能会让您朝着正确的方向前进。可能有一种“更加时髦”的方法,但我不确定。

def findAllChildren(category, results = []) {
   category.subCategories.each { child ->
      results << child
      findAllChildren(child, results)
   }
}

def someOtherMethod() {
  def allChildren = []
  findAllChildren(parentCategory, allChildren)
}