hibernate - 在 Grails/Hibernate 中,您可以将生成器设置为仅在未分配时递增吗?

标签 hibernate orm grails groovy

是否有办法让 hibernate 在未分配的情况下使用自动生成的 id,但在已分配的情况下使用分配的值?

最佳答案

我相信 Grails 中没有现成的解决方案,但实现您自己的 org.hibernate.id.IdentifierGenerator 应该相当简单。

实现该接口(interface),只要没有分配 id,您就会委托(delegate)给默认 id 生成策略,否则使用域对象已分配的值。

在未分配 key 时委托(delegate)给 IdentityGenerator 的简单实现可能如下所示:

package my.company.hibernate

import org.hibernate.engine.SessionImplementor

public class PreAssignedIdGenerator extends org.hibernate.id.IdentityGenerator {
  public Serializable generate(SessionImplementor session, Object object) {
    return object.id ? object.id : super.generate(session, object)
  }
}

您的域类需要定义新的 id 生成器:

class FooDomain { 
  Long id
  static mapping = {
    id generator: "my.company.hibernate.PreAssignedIdGenerator"
  }
}

关于hibernate - 在 Grails/Hibernate 中,您可以将生成器设置为仅在未分配时递增吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3043143/

相关文章:

hibernate - 非唯一对象异常 : when updating an entity with hibernate

java - Thymeleaf 显示该书的作者列表

java - hibernate 总是自行删除表中的所有数据

css - 如何使用下载的 Bootstrap 文件

plugins - 使用一个提交按钮即可针对多个域类和多个搜索字段使用Grails可搜索插件

java - Hibernate - 已持久化子项的 "detached entity passed to persist"错误

java - hibernate : How override an attribute from mapped super class

javascript - Prisma 迁移跳过插入

.net - 现在跳到 LINQ to SQL 是个坏主意吗?

security - Grails安全插件:Requestmap与数据库不一致