2012-11-07 36 views
8

Tôi đang làm việc với cơ sở dữ liệu cũ và có liên kết nhiều người với bảng tham gia mà tôi đã giải quyết ở mức độ lớn khi ánh xạ đang hoạt động tốt . Nhưng có một cột bổ sung và trong trường hợp Sách, mô hình tác giả cho phép nói rằng nm_author_books chứa một trường được gọi là 'tiền bản quyền'. Câu hỏi là làm cách nào để truy cập trường này từ bất kỳ hướng nào?GORM lập bản đồ nhiều người và có thể kết nối với một trường bổ sung

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

Nếu bảng nm_author_book có [nm_book_id, nm_author_id, royalty] cách nào để truy cập vào tiền bản quyền?

Trả lời

7

Bạn có thể tạo đối tượng miền mô hình tham gia bảng thay vì thay đổi ánh xạ cho Sách và Tác giả bạn có chúng trỏ đến miền AuthorBookRoyalty.

Class AuthorBookRoyalty { 
    Author author 
    Book book 
    Long royalty 
} 

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

Làm tương tự cho Tác giả và bây giờ bạn có thể xử lý tiền bản quyền. Bạn có thể cần phải điều chỉnh ánh xạ trên bảng kết nối để làm cho nó ánh xạ tới cơ sở dữ liệu hiện tại của bạn.

+0

Cảm ơn - điều đó có thể hiệu quả! – rks

+0

Hy vọng nó sẽ giúp nó không chính xác như nhau nhưng nó ít nhất sẽ cung cấp cho bạn hầu hết các chức năng tương tự. –

11

Ý tưởng cơ bản là thay đổi từ 1 nhiều-nhiều đến 2 many-to-one: a Book có nhiều BookAuthorDetail và một tác giả có nhiều 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] 
} 

để truy cập nhuận bút nhân BookAuthorDetail, bạn có thể làm: BookAuthorDetail.findAllByBookAndAuthor(bookInstance, authorInstance)

+0

Vui lòng không thêm "cảm ơn" làm câu trả lời. Khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [bỏ phiếu cho các câu hỏi và câu trả lời] (http://stackoverflow.com/help/privileges/vote- lên) mà bạn thấy hữu ích. – Beterraba

+0

Tôi đã cập nhật câu trả lời của mình, vì vậy bạn có thể bỏ phiếu bầu cho tôi không? Tôi đang cố sửa vấn đề trả lời của mình – hakuna1811

+0

Xin chào! Tôi đã không downvote nó. Tôi sẽ upvote bạn thay thế. – Beterraba

Các vấn đề liên quan