Grails中的域类构造函数?

时间:2014-05-26 23:46:50

标签: grails groovy gorm

我想在创建域类对象时运行一些代码;在Java中,我会在构造函数中包含此代码。我怎么能用Groovy / Grails做呢?

感谢。

3 个答案:

答案 0 :(得分:6)

您可以向域类添加构造函数,但如果尚未存在,则还必须添加默认的no-arg构造函数。

//Domain Class
class Author {
    String name

    Author() {
        //Execute post creation code
    }

    Author(String _name) {
        name = _name

        //Execute post creation code
    }
}

另一方面,域类是POGO,因此如果没有需要在对象创建时执行的额外逻辑,您也可以使用映射构造函数。在不添加任何构造函数的情况下,您还可以将Author实例化为:

Author(name: 'John Doe')

答案 1 :(得分:3)

你见过关于groovy构造函数的this page吗?我已经成功地使用这种技术将地图构造函数添加到Grails域类。

This article包含一个很好的例子,并突出了一个重要问题。如果要禁用Grails域类的映射构造函数(不是我认为这是一个特别好的主意),您可能会尝试抛出运行时异常而不是返回新实例。或者,让您的地图构造函数对数据进行编组并调用其他构造函数。

答案 2 :(得分:0)

根据确切的用例,您可以使用GORM事件......

http://docs.grails.org/3.1.1/guide/single.html#5.5.1

所以你可以使用

def beforeInsert() {
    doMyCustomThing()
}

def onLoad() {
    doMyCustomThing()
}

还有一些其他选项,包括Hibernate事件和自定义GORM事件