假设我们有书

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设置父本时会收到java.lang.reflect.InvocationTargetException。

我知道我在这里想念什么...

最佳答案

使用鉴别功能:

  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
  }

}

09-04 09:57