GORM,继承模型,递归链接

时间:2011-11-11 03:45:47

标签: inheritance grails groovy gorm

假设我们有书

class Book {

   String title
   String type="Book"
   String author
   Book parentBook // <----<<<
   //...
}

我们将图书扩展到其他类型

 class ReferenceBook extends Book {

    String type="RefBook"

    void setParentBook(Book b) {
       if ((b && b.type) && (b.type=="RefBook")) {
          parentBook = b
       } else {
          parentBook = null
       }
    }
 }

当我这样做时,我在尝试为ReferenceBook设置parentBook时得到java.lang.reflect.InvocationTargetException。

我知道我在这里遗漏了一些东西......

1 个答案:

答案 0 :(得分:1)

使用鉴别器功能:

  class Book {
   String title
   String author
   Book parentBook // <----<<<
   //...
   static mapping = {
     tablePerHierarchy false
     discriminator column:[name:"discriminator", length:200, value:'Book']
   }
  }

class ReferenceBook extends Book {
  //...
  static mapping = {
    discriminator column:[value:'RefBook']
  }
  void setParentBook(Book b) {
    parentBook = ('RefBook' == b?.properties['class']) ? b : null
  }

}