hibernate - Grails "assigned"ID生成策略和beforeSave

标签 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

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

编辑:

这似乎可行,但它很hacky:在属性声明中,我添加了:
String id = DomainUtil.newId(); 

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

最佳答案

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

关于hibernate - Grails "assigned"ID生成策略和beforeSave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729885/

相关文章:

java - 如何让 Hibernate 4 停止抛出 "Deleting detached instance"?

java - 在不启动事务的情况下通过 Hibernate 对 MySQL 数据库运行查询的含义是什么?

string - 增加VARCHAR的限制

grails - 登录后重定向?

java - Spring 。 AutoWired 对象 NullPointerException

java - 关于事务和事件监听器

java - 让 JPA 生成具有指定行格式的表

grails - Grails 2.5.4 中的 GORM 触发模式

grails - 可以访问域类的常规脚本

unit-testing - Grails-从2.4.5升级到2.5.5导致运行单元测试时出错:null