2012-11-07 10 views
8

Pracuję ze starszą bazą danych i mam powiązanie wiele-wiele z tabelą sprzężeń, które rozwiązałem w dużym stopniu, ponieważ odwzorowania działają dobrze . Ale jest dodatkowa kolumna, aw przypadku Książki model autora pozwala powiedzieć, że nm_author_books zawiera pole o nazwie "royalty". Pytanie brzmi: jak uzyskać dostęp do tego pola z dowolnego kierunku?Mapowanie wiele-do-wielu GORM i łączenie z dodatkowym polem

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

Jeśli tabela nm_author_book ma [nm_book_id, nm_author_id royalty], co jest sposobem, aby uzyskać dostęp do tantiem?

Odpowiedz

7

Można utworzyć obiekt domeny, który modeluje tę tabelę dołączania, aby zamiast zmieniać odwzorowanie dla Książki i autora, które wskazują one domenę AuthorBookRoyalty.

Class AuthorBookRoyalty { 
    Author author 
    Book book 
    Long royalty 
} 

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

Czy podobna Autora i obecnie można radzić sobie z tantiem. Konieczne może być dostosowanie odwzorowania na tabeli sprzężenia, aby mapować do bieżącej bazy danych.

+0

Dzięki - to może zadziałać! – rks

+0

Mam nadzieję, że nie jest dokładnie taki sam, ale powinien przynajmniej dać ci większość tej samej funkcjonalności. –

11

Podstawowym założeniem jest zmiana od 1 many-to-many do 2 many-to-one: książka ma wiele BookAuthorDetail i autor wielu 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] 
} 

dostęp do tantiem przez BookAuthorDetail, można do: BookAuthorDetail.findAllByBookAndAuthor(bookInstance, authorInstance)

+0

Proszę nie dodawać "dziękuję" jako odpowiedzi. Gdy masz już wystarczającą [reputację] (http://stackoverflow.com/help/whats-reputation), będziesz mógł [głosować na pytania i odpowiedzi] (http://stackoverflow.com/help/privileges/vote- w górę), które uznałeś za pomocne. – Beterraba

+0

Zaktualizowałem swoją odpowiedź, więc czy możesz mnie odrzucić na głos? Próbuję rozwiązać mój problem z odpowiedzią. – hakuna1811

+0

Cześć. Nie scharakteryzowałem tego. Zamiast tego awansuję. – Beterraba

Powiązane problemy