有没有办法让hibernate使用自动生成的id,如果它没有被分配但是如果是的那样使用指定的值?
答案 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"
}
}