Grails2 支持 many-to-many关系。定义时在双方都定义一个 hasMany关系 ,在从属方还要定义一个 belongsTo 关系:
class Book {
static belongsTo = Author
static hasMany = [authors:Author]
String title
}
class Author {
static hasMany = [books:Book]
String name
}
Grails 在数据库层使用一个连接表映射一个many-to-many关系。在关系拥有方,这里的Author,负责持久化这个关系并且可以从关系的一端跨越到另一端实现级联保存。
例如,这段代码可以实现级联保存:
new Author(name:"Stephen King")
.addToBooks(new Book(title:"TheStand"))
.addToBooks(new Book(title:"TheShining"))
.save()
但下面的代码仅仅保存了 Book 而没有保存 authors!
new Book(name:"Groovy in Action")
.addToAuthors(new Author(name:"DierkKoenig"))
.addToAuthors(new Author(name:"GuillaumeLaforge"))
.save()
就像Hibernate 一样,这是一个预期的特性,只允许many-to-many关系的拥有方负责管理这种关系。
Grails'的Scaffolding 目前还不支持many-to-many关系。因此,你必须自己编写代码来管理这种关系。