2012-11-07 19 views
8

私は従来のデータベースを使用しており、マッピングが正常に動作しているため大規模に解決した結合テーブルと多対多の関連付けをしています。しかし、追加の列があり、Bookの場合、Authorモデルは、nm_author_booksに 'royalty'というフィールドが含まれていると言うことができます。質問はどのような方向からこのフィールドにアクセスするのですか? nm_author_bookテーブルがある場合は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_book_id、nm_author_id、ロイヤリティ]ロイヤルティにアクセスする方法は何ですか?

答えて

7

BookとAuthorのマッピングを変更するのではなく、AuthorBookRoyaltyドメインを指すように、テーブルを結合するモデルを作成するドメインオブジェクトを作成できます。

Class AuthorBookRoyalty { 
    Author author 
    Book book 
    Long royalty 
} 

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

これは著者と同様ですが、ロイヤルティを処理できるようになりました。現在のデータベースにマップするには、結合表のマッピングを調整する必要があります。

+0

ありがとうございます - それはうまくいくかもしれません! – rks

+0

それはまったく同じではありませんが、少なくとも同じ機能のほとんどを提供する必要がありますように願っています。 –

11

基本的な考え方は、多対一の2の多対多の1からの変更点です:今、多くのBookAuthorDetailを持っていると著者は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] 
} 

を持っている、ことができますdo:BookAuthorDetail.findAllByBookAndAuthor(bookInstance, authorInstance)

+0

答えとして「ありがとうございます」を追加しないでください。十分な[評判](http://stackoverflow.com/help/whats-reputation)があれば、あなたは[質問と回答を投票する]ことができます(http://stackoverflow.com/help/privileges/vote-あなたが助けてくれたこと)。 – Beterraba

+0

私は自分の答えを更新したので、あなたは私の投票を取り消すことができますか?私は私の答えの問題を解決しようとしています – hakuna1811

+0

こんにちは。私はそれをdownvoteしなかった。私は代わりにあなたをupvoteします。 – Beterraba

関連する問題