Grails“分配”ID生成策略和之前保存

时间:2012-12-05 18:24:22

标签: hibernate grails

在域类中,我正在使用“已分配”的ID生成器:

static mapping = {
    id(generator: 'assigned')
}

在保存实体之前,我想确保它已设置了ID。

def beforeSave() {
    if (!id) {
        id = DomainUtil.newId();
    }
}

不幸的是,这不起作用:

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): was.Product

在检查id之后,似乎会调用“beforeSave”挂钩。有办法解决这个问题吗?我正在使用Grails 2.1.1。

修改

这似乎有效,但它非常hacky:在财产声明中,我补充说:

String id = DomainUtil.newId(); 

这会使用“default”初始化id,然后可以在调用save()之前对其进行修改。

2 个答案:

答案 0 :(得分:1)

beforeSave不是受支持的GORM事件。您想使用beforeInsert

relevant docs here

答案 1 :(得分:1)

您可以尝试beforeValidate。它可能是你想要的最接近的东西。我不确定它会在你的具体情况下起作用。它会在插入或更新时执行,因为save()会调用validate()