2014-02-06 57 views
6

Grails belongsTo文檔,有什麼用的解釋屬於關聯Grails中

class Book { 
    static belongsTo = Author 
} 

什麼是書級聯操作,當CRUD操作上作者進行的影響?

編輯:

感謝您的答覆,可能是我沒有正確說明我的問題。我想知道

VS

之間
static belongsTo [author:Author] 

static belongsTo = Author 
+1

關於你的編輯,兩者沒有什麼不同(實際上,第一個應該是'static belongsTo = [author:Author]')。他們會有同樣的效果。第一種形式只是讓你指定屬性的名稱。 –

回答

9

belongsTo是有益的,如果你需要一個參考回所屬對象的差異。在這種情況下,Author可能有很多Book。但是,也許你正在使用書籍對象,並希望提及該書籍實例的Author。這是獲得它的好方法。

就CRUD而言,刪除或更新書籍不會對Author做任何事情,但刪除Author將刪除Book。如果您沒有添加belongsTo,那麼將不會有層疊保存/更新/刪除,您必須手動完成。

例子:

def a = new Author(name: 'J.K. Rawling') 
a.addToBooks(new Book(title: 'Harry Potter 1')) 
a.addToBooks(new Book(title: 'Harry Potter 2')) 
a.save() // Saves author and book instances 

a.delete() // Author and both books are deleted 

編輯:

的OP更新了自己的問題,我真的不知道答案是什麼。希望Burt Beckwith很快會出現!好問題,OP。

+0

它應該是'J. K. Rowling' :)) – Guus

0

除了Grantmc:

屬於關聯實際上標誌着一個嵌入一種兩者之間的關係,這就是爲什麼這是用來當所有的操作都將自動級聯。

不屬於關聯,你需要手動定義級聯(如果你在人想anycascades您relatoinship)

0

似乎混亂和額外的努力,我那是因爲我可以實現通過只是簡單地使用關係相同的結果一個hasMany而忽略belongsTo,但你需要讓的說Author類變量Book域/類

class Author { 
    static hasMany = [books: Book] 
} 

class Book { 
    Author author //can have only one Instance to be saved at a time 
} 

但是你用belongsTo是它執行的關係,遵循從012路徑的原因到Book插入數據時,保持使用belongsTo控制關係的完美方式。如果您沒有將其指定爲類變量或使用belongsto Grails不會理解雙向關係。

1

兩種方式都以相同的方式提供級聯效果。他們唯一的區別是,在前一種情況下,您將在Book對象中提供作者的引用,而您不在後者中。那就是:

你可以在第二種情況下說Book b = new Book(); b.author

0

作爲doc says,belongsTo = [author:Author]與belongsTo = Autor相同,兩者都會創建一個名爲author的屬性,引用「father」對象。

Saludos