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

时间:2010-06-15 07:05:27

标签: hibernate orm grails groovy

有没有办法让hibernate使用自动生成的id,如果它没有被分配但是如果是的那样使用指定的值?

1 个答案:

答案 0 :(得分:3)

我相信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"
  }
}