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*
Purpose
Adds a domain class relationship for one-to-many or many-to-many relationship, where the relationship is indicated by the property used as the suffix to the method.
Examples
Description
The addTo*
method is a dynamic method that uses an association to automatically add instances to the association. It also automatically configures the bi-directional relationship so that both sides are set.
Consider these domain classes which are used in the example above:
class Author {
String name
static hasMany = [fiction: Book, nonFiction: Book]
}
class Book {
String title
static belongsTo = [author: Author]
}
The example creates a new fiction book and a new non-fiction book, and an author. addToFiction
is a dynamic method that works because the Fiction
part corresponds to the fiction
collection that results from the hasMany
declaration, and likewise for NonFiction
and nonFiction
. After calling save()
on the Author
, the associated Book
instances are transitively saved too, even though we didn’t call save()
on either of them.
In addition, calling addTo* initializes the associated collections, and sets the back-reference of the author
property in each Book
.
There’s also a more compact version of the method that accepts a Map
instead of a domain class instance:
def a = new Author(name: "Stephen King")
.addToFiction(title: "IT")
.addToNonFiction(title: "On Writing: A Memoir of the Craft")
.save()
This works because GORM knows the type that is being added and can use the standard Map
constructor to create the instances for you.