1

在域类中,我使用“分配的”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

“beforeSave”钩子似乎是在检查 id 之后被调用的。有没有办法解决这个问题?我使用 Grails 2.1.1。

编辑:

这似乎可行,但它很hacky:在属性声明中,我添加了:

String id = DomainUtil.newId(); 

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

4

2 回答 2

1

beforeSave不是受支持的 GORM 事件。你想用beforeInsert.

相关文档在这里

于 2012-12-05T18:50:46.833 回答
1

你可以试试beforeValidate。它可能是最接近您正在寻找的东西。不过,我不确定它是否适用于您的具体情况。它将在插入或更新时执行,因为save()调用validate().

于 2012-12-06T01:44:50.447 回答