3

Here is my domain class:

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
    }}

Category is a domain class and has self-reference to both parent and list of children.

Now I want something like this: given a parent category id, I want a list of all sub-categories belong to this id. (NB: not direct children, all the children under the id)

For example, id 1 has children 2 and 3, and 2 has children 4 and 5.

Given I got category id 1 from client, I want a sub categories with id 2,3,4,5

Taken advantage of Groovy, what is the best code to implement that?

4

1 回答 1

4

Untested code but might get you moving in the right direction. There might be a "groovier" way to do this, but I'm not sure.

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

def someOtherMethod() {
  def allChildren = []
  findAllChildren(parentCategory, allChildren)
}
于 2013-05-24T13:23:27.510 回答