2011-11-11 11 views
1

私たちは図書GORM、継承モデル、再帰的なリンク

class Book { 

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

を持っていると私たちは、私がこれを行うと、私はにjava.lang.reflect.InvocationTargetExceptionを得る

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を設定しようとしているときです。私はここで何かが欠けてる知っ

...

答えて

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 
    } 

}