2011-11-11 38 views
1

假設我們有書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 
     } 
    } 
} 

我得到一個java.lang.reflect.InvocationTargetException當試圖爲ReferenceBook設置父母書籍時。

我知道我在這裏失蹤的東西...

回答

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 
    } 

}