Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/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
在Grails/Hibernate中,您能否仅在未分配时将生成器设置为增量?_Hibernate_Orm_Grails_Groovy - Fatal编程技术网

在Grails/Hibernate中,您能否仅在未分配时将生成器设置为增量?

在Grails/Hibernate中,您能否仅在未分配时将生成器设置为增量?,hibernate,orm,grails,groovy,Hibernate,Orm,Grails,Groovy,有没有办法让hibernate在未分配的情况下使用自动生成的id,但在分配的情况下使用分配的值?我相信Grails中没有现成的解决方案,但是实现自己的org.hibernate.id.IdentifierGenerator应该相当简单 实现该接口时,只要未分配id,您就可以委托默认的id生成策略,否则将使用已分配的域对象值 一个简单的实现,在未分配密钥时委托给IdentityGenerator,如下所示: package my.company.hibernate import org.hibe

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

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

实现该接口时,只要未分配id,您就可以委托默认的id生成策略,否则将使用已分配的域对象值

一个简单的实现,在未分配密钥时委托给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"
  }
}