addTo* 方法
目的
为一对多或多对多关系添加域类关系,其中以该方法的后缀的属性名称表示关系的映射属性
示例
def fictBook = new Book(title: "IT")
def nonFictBook = new Book(title: "On Writing: A Memoir of the Craft")
def a = new Author(name: "Stephen King")
.addToFiction(fictBook)
.addToNonFiction(nonFictBook)
.save()
描述
`addTo*`方法是一种动态的方法,使用一个会自动添加实例的关联。它还自动配置双向关系,使双方都设置。
考虑上面例子中使用的这些domain类:
@Entity
class Author implements GormEntity<Author>{
String name
static hasMany = [fiction: Book, nonFiction: Book]
}
@Entity
class Book implements GormEntity<Book>{
String title
static belongsTo = [author: Author]
}
这个例子创造了一本新的小说类书籍和一本新的非小说类书籍,归属于一个作者。
addToFiction`是一个动态方法,因为 `Fiction
部分表示的`fiction`集合定义在domain类的`hasMany`属性中,同样的关系也表现在 `NonFiction`和`nonFiction`上.
通过调用 `Author`对象的`save()`方法,关联的 `Book`示例也保存入库, 尽管我们没有显示的调用它们的`save()`方法.
此外,调用addTo*方法会初始化关联的集合,并且会设置`Book`的`author`的引用关系。
还有一种更紧凑的方法,该方法接受一个“map”而不是一个域类实例,如下调用,则自动初始化`Book`对象:
def a = new Author(name: "Stephen King")
.addToFiction(title: "IT")
.addToNonFiction(title: "On Writing: A Memoir of the Craft")
.save()
以上代码可以运行,是因为GORM知道addTo被添加类型,可以使用标准的`Map`构造函数来创建实例.