(Quick Reference)

cascade

Purpose

Configures the cascading behavior of an association.

Examples

class Author {
    static hasMany = [books:Book]
    static mapping = {
        books cascade:'all-delete-orphan'
    }
}

Description

Usage: association_name(cascade:string)

Arguments:

  • cascade - The cascading behavior to define. Can be one or more (comma-separated) of all, merge, save-update, delete, lock, refresh, evict, replicate or all-delete-orphan (one-to-many associations only).

By default GORM configures a cascading policy of "all" in the case where one entity "belongs to" another. For example:

class Book {
    static belongsTo = [author:Author]
}
class Author {
    static hasMany = [books:Book]
}

Here all persistence operations will cascade from the Author domain to the Book domain. So when a Author is deleted so will all his books.

If the association doesn't define an owner (a "belong to" relationship):

class Book {
}
class Author {
    static hasMany = [books:Book]
}

Then GORM uses a cascading policy of "save-update" by default. So if an Author is deleted the Book domains associated with the Author won't be deleted. If you wish to customize this behavior you can use the cascade argument on an association:

class Author {
    static hasMany = [books:Book]
    static mapping = {
        books cascade:'all-delete-orphan'
    }
}

Here a Book will also be deleted if it is removed (orphaned) from the books association.

See the section on transitive persistence in the Hibernate user guide.