2012-11-07 11 views
8

Sto lavorando con database legacy e ho un'associazione many-to-many con un join-table che ho risolto in larga misura mentre i mapping funzionano bene . Ma c'è una colonna aggiuntiva e, nel caso di Book, il modello Author lascia intendere che i nm_author_books contengono un campo chiamato "royalty". La domanda è: come posso accedere a questo campo da qualsiasi direzione?GORM molti-a-molti mapping e jointable con un campo aggiuntivo

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'] } 
} 

Se la tabella nm_author_book ha [nm_book_id, nm_author_id, regalità] qual è il modo per accedere alla regalità?

risposta

7

È possibile creare un oggetto dominio che modella quella tabella di join in modo che, invece di modificare la mappatura per Libro e Autore, vengano indirizzati al dominio AuthorBookRoyalty.

Class AuthorBookRoyalty { 
    Author author 
    Book book 
    Long royalty 
} 

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

È simile per l'autore e ora è possibile gestire i diritti d'autore. Potrebbe essere necessario regolare la mappatura sulla tabella di join per renderla associata al database corrente.

+0

Grazie - potrebbe funzionare! – rks

+0

Spero che non sia esattamente lo stesso, ma almeno dovrebbe darti la maggior parte delle stesse funzionalità. –

11

L'idea di base è il cambiamento dal 1 molti-a-molti a 2 many-to-one: un libro ha molti BookAuthorDetail e un autore ha molte 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] 
} 

per accedere re da BookAuthorDetail, è possibile do: BookAuthorDetail.findAllByBookAndAuthor(bookInstance, authorInstance)

+0

Si prega di non aggiungere "grazie" come risposta. Una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation), sarai in grado di [votare domande e risposte] (http://stackoverflow.com/help/privileges/vote- in alto) che hai trovato utile. – Beterraba

+0

Ho aggiornato la mia risposta, quindi puoi annullare il voto per me? Sto cercando di risolvere il mio problema di risposta – hakuna1811

+0

Ciao. Non l'ho sottovalutato. Preferirò invece te. – Beterraba