在域类中,我正在使用“已分配”的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()
之前对其进行修改。
答案 0 :(得分:1)
beforeSave
不是受支持的GORM事件。您想使用beforeInsert
。
答案 1 :(得分:1)
您可以尝试beforeValidate
。它可能是你想要的最接近的东西。我不确定它会在你的具体情况下起作用。它会在插入或更新时执行,因为save()
会调用validate()
。