Grails - как выполнять код перед каждым сохранением?

Есть ли хороший / стандартный способ выполнения общего кода перед каждым save() вызов на доменные классы?

Например, мой домен

class Page {

    String url
    Boolean processed
    Date date
    Integer urlCrc 
}

Моя форма имеет только 3 первых поля, и я хотел бы рассчитать urlCrc каждый раз save() метод называется. Я не могу просто переопределить метод сохранения, потому что он введен.

3 ответа

Решение

Вы можете использовать события GORM - см. Документы. Так как по умолчанию validate() называется перед каждым save() Я бы использовал это.

class Page {
    //your defs here

    def beforeValidate() {
        this.urlCrc = yourComputationHere
    }
}
class Page {
    def beforeInsert() {
        this.beforeUpdate()
    }
    def beforeUpdate() {
        this.urlCrc = 'calculate something'
    }
}

Эта тема описана в документации GORM:

6.5 Расширенные возможности GORM

6.5.1 События и автоматическая отметка времени

Другие вопросы по тегам