我有几个具有多对一关系的mysql表,正在使用该关系的映射表。如下
book_type_map
Column Datatype
book_id Char(36)
book_type_id Char(36)
book_type
Column Datatype
book_type_id Char(36)
book_type Text
default TinyInt(1)
books
Column Datatype
book_id Char(36)
如您所见,
book
表或book_type
表没有互相引用的列,我需要能够从book_type
访问book
。这些是我的Book
和BookType
的域对象class Book {
String id
BookType bookType
static mapping = {
table 'books'
id column: 'book_id', generator: 'uuid2'
bookType joinTable: [ name: 'book_type_map',
key: 'book_id',
column: 'book_type_id']
}
}
class BookType {
String id
String type
Boolean default
static mapping = {
table 'book_type'
id column: 'book_type_id', generator: 'uuid2'
type column: 'book_type'
}
}
当我运行此代码时,当我执行
Book.findAll()
时出现此异常我认为我的映射不正确。如果有人能指出我正确的方向,我将不胜感激。
最佳答案
通常,拥有联接表仅对一对多或多对多关系有意义。在此示例中,Book只能具有一个BookType,那么为什么需要一个联接表?您只需要具有BookTypeId的列即可。
我认为您正在寻找的是:
class Book {
String id
static hasMany = [bookType: BookType]
static mapping = {
table 'books'
id column: 'book_id', generator: 'uuid2'
bookType joinTable: [ name: 'book_type_map',
key: 'book_id',
column: 'book_type_id']
}
}
有关更多详细信息,请参见docs。
编辑
如果您设置了此表结构,则可以翻转关系(不支持此关系)。这个结构对我来说真的没有意义,但是可以工作:
class Book {
String id
static mapping = {
table 'books'
id column: 'book_id', generator: 'uuid2'
}
}
class BookType {
String id
String type
Boolean default
static hasMany = [books: Book]
static mapping = {
table 'book_type'
id column: 'book_type_id', generator: 'uuid2'
type column: 'book_type'
books joinTable: [ name: 'book_type_map',
key: 'book_type_id',
column: 'book_id']
}
}