在域类中,我使用的是“分配的” 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”钩子(Hook)。有办法解决这个问题吗?我正在使用Grails 2.1.1。

编辑:

这似乎可行,但是很不客气:在propert声明中,我添加了:
String id = DomainUtil.newId();

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

最佳答案

您可以尝试beforeValidate。它可能是您要寻找的最接近的东西。我不确定它是否可以在您的特定情况下使用。因为save()调用validate(),所以它将在插入或更新时执行。

07-25 21:57