是否有办法让 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/