Grails GORM多对多映射和带有附加字段的jointable

Grails GORM多对多映射和带有附加字段的jointable,grails,many-to-many,gorm,jointable,Grails,Many To Many,Gorm,Jointable,我正在使用遗留数据库,并且与一个连接表有多对多的关联,我已经在很大程度上解决了这个关联,因为映射工作正常。但是有一个额外的专栏,在Book的案例中,作者模型让我们说nm_Author_books包含一个名为“版税”的字段。问题是如何从任何方向访问此字段 class Book { String title static belongsTo = Author static hasMany = [authors: Author] static mapping = { a

我正在使用遗留数据库,并且与一个连接表有多对多的关联,我已经在很大程度上解决了这个关联,因为映射工作正常。但是有一个额外的专栏,在Book的案例中,作者模型让我们说nm_Author_books包含一个名为“版税”的字段。问题是如何从任何方向访问此字段

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\u author\u book表具有[nm\u book\u id,nm\u author\u id,版税]访问版税的方法是什么?

您可以创建一个域对象,该域对象对连接表进行建模,这样就不用更改book和author的映射,而是让它们指向AuthorBookRoyalty域

Class AuthorBookRoyalty {
  Author author
  Book book
  Long royalty
}

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

为作者做类似的事情,你们现在可以处理版税了。您可能需要调整联接表上的映射,使其映射到当前数据库。

基本思想是从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)

希望它有所帮助,但它不完全相同,但至少应该为您提供大部分相同的功能。请不要添加“谢谢”作为答案。一旦你有足够的答案,你将能够找到你认为有用的答案。我确实更新了我的答案,所以你能投我一票吗?我正在努力解决我的答案问题