GORM, Унаследованная модель, рекурсивная ссылка - PullRequest
1 голос
/ 11 ноября 2011

Предполагая, что у нас есть книги

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

Когда я это делаю, я получаю исключение java.lang.reflect.InvocationTargetException при попыткеустановить parentBook для ReferenceBook.

Я знаю, что что-то здесь упущено ...

1 Ответ

1 голос
/ 11 ноября 2011

использовать функцию дискриминатора:

  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
  }

}

...