2015-04-18 96 views
0

例如,我有父類作者:Grails的,格姆,用個createCriteria或其他一些替代

class Author {  
    String name 
    static hasMany = [ 
     fiction: Book, 
     nonFiction: Book 
    ] 
} 

和兒童類圖書:

class Book {  
    String title 
    static belongsTo = [author: Author] 
} 

我已經做了一些記錄作者使用:

def fictBook = new Book(title: "IT") 
def nonFictBook = new Book(title: "On Writing: A Memoir of the Craft") 
def a = new Author(name: "Stephen King") 
      .addToFiction(fictBook) 
      .addToNonFiction(nonFictBook) 
      .save() 

我怎樣才能找到子級記錄的父級和父級記錄的孩子?

我試圖用findBy方法,如下:

def book = Book.get(1) 
def author = Author.findByFiction(book) 

但我得到一個錯誤:

Parameter "#2" is not set; SQL statement: 

我看了,有什麼在一些關係findBy被拒絕使用,我怎麼能用標準或其他方法重寫它?

回答

1

當您添加此belongsTo

static belongsTo = [author: Author] 

這觸發了對另外一個名爲Author型(由AST編譯過程中變換)的author財產,有效類似於聲明

Author author 

但不要」這樣做,這將是多餘的。

所以,如果你有一本書,它的Author是通過該屬性訪問:

def book = Book.get(1) 
def author = book.author 
+0

感謝。在閱讀你的文章之前,我自己猜到了) – pragmus