Grails GORM多对多映射和带有附加字段的jointable
我正在使用遗留数据库,并且与一个连接表有多对多的关联,我已经在很大程度上解决了这个关联,因为映射工作正常。但是有一个额外的专栏,在Book的案例中,作者模型让我们说nm_Author_books包含一个名为“版税”的字段。问题是如何从任何方向访问此字段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
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)
希望它有所帮助,但它不完全相同,但至少应该为您提供大部分相同的功能。请不要添加“谢谢”作为答案。一旦你有足够的答案,你将能够找到你认为有用的答案。我确实更新了我的答案,所以你能投我一票吗?我正在努力解决我的答案问题