Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate “圣杯”;指定的;ID生成策略与beforeSave_Hibernate_Grails - Fatal编程技术网

Hibernate “圣杯”;指定的;ID生成策略与beforeSave

Hibernate “圣杯”;指定的;ID生成策略与beforeSave,hibernate,grails,Hibernate,Grails,在域类中,我使用“分配的”ID生成器: static mapping = { id(generator: 'assigned') } 在保存实体之前,我希望确保它已设置id def beforeSave() { if (!id) { id = DomainUtil.newId(); } } 不幸的是,这不起作用: org.hibernate.id.IdentifierGenerationException: ids for this class mus

在域类中,我使用“分配的”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之后调用的。有办法解决这个问题吗?我正在使用Grails2.1.1

编辑:

这似乎是可行的,但它相当骇人听闻:在propert声明中,我补充道:

String id = DomainUtil.newId(); 

这将使用“默认值”初始化id,然后可以在调用
save()

beforeSave
之前对其进行修改,这不是受支持的GORM事件。您想在插入之前使用


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

你是对的,不知道我从哪里得到的。尽管如此,此事件似乎是在hibernate检查id是否存在后触发的,因此我无法在我的特定情况下使用它。