(快速参考)

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* 方法是一种动态方法,它使用关联自动向关联添加实例。它还会自动配置双向关系,以便设置双方。

考虑上述示例中使用的这些域类

class Author {

    String name

    static hasMany = [fiction: Book, nonFiction: Book]
}
class Book {

    String title

    static belongsTo = [author: Author]
}

此示例创建了一本新的小说、一本新非小说和一位作者。addToFiction 是一个动态方法,其工作原理是,因为 Fiction 部分对应于由 hasMany 声明产生的 fiction 集合,对 NonFictionnonFiction 也是如此。在 Author 上调用 save() 后,关联的 Book 实例也会被暂时保存,即使我们没有对任何一个调用 save()

此外,调用 addTo* 会初始化关联集合,并设置每个 Bookauthor 属性的回引。

此方法还有接受 Map 而不是域类实例的更紧凑版本

def a = new Author(name: "Stephen King")
             .addToFiction(title: "IT")
             .addToNonFiction(title: "On Writing: A Memoir of the Craft")
             .save()

GORM 知道正在添加的类型并可以使用标准 Map 构造函数为您创建实例。