2012-11-07 69 views
8

我正在使用遺留數據庫,並且有一個多對多的連接表,我在很大程度上解決了連接表,因爲映射工作正常。但是有一個額外的專欄,在Book的情況下,Author模型允許說nm_author_books包含一個名爲'皇室'的字段。問題是我如何從任何方向訪問此字段?GORM多對多映射和連接表與一個附加字段

class Book { 
    String title 
    static belongsTo = Author 
    static hasMany = [authors: Author] 
    static mapping = { authors joinTable: [name: "mm_author_books", key: 'mm_book_id' ] } 
} 
class Author { 
    String name 
    static hasMany = [books: Book] 
    static mapping = { books joinTable: [name: "mm_author_books", key: 'mm_author_id'] } 
} 

如果nm_author_book表中有[nm_book_id,nm_author_id,費]什麼是訪問費的方式嗎?

回答

7

您可以製作一個域對象來模擬連接表,而不是更改書和作者的映射,使它們指向AuthorBookRoyalty域。

Class AuthorBookRoyalty { 
    Author author 
    Book book 
    Long royalty 
} 

class Book { 
    String title 
    static belongsTo =Author 
    Static hasMany[authors: AuthorBookRoyalty] 
} 

作者類似,你現在可以處理版稅。您可能需要調整連接表上的映射以使其映射到當前數據庫。

+0

謝謝 - 這可能工作! – rks

+0

希望它可以幫助它不完全一樣,但它至少應該給你大部分相同的功能。 –

11

的基本思想是從變化1個多對多至2個多到一:一本書有許多BookAuthorDetail和作者有許多BookAuthorDetail

class Book { 
    String title 

    static hasMany = [details: BookAuthorDetail] 
} 
class Author { 
    String name 
    static hasMany = [details: BookAuthorDetail] 
} 

class BookAuthorDetail { 
    String royalty 
    static belongsTo = [book: Book, author: Author] 
} 

通過BookAuthorDetail訪問皇室成員,你可以做:BookAuthorDetail.findAllByBookAndAuthor(bookInstance, authorInstance)

+0

請不要添加「謝謝」作爲答案。一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你將能夠[投票問題和答案](http://stackoverflow.com/help/privileges/vote- )你發現有幫助。 – Beterraba

+0

我確實更新了我的答案,所以你可以爲我投票嗎?我正試圖解決我的答案問題 – hakuna1811

+0

你好。我沒有倒下它。我會反過來讚揚你。 – Beterraba