3
有沒有辦法讓hibernate使用自動生成的id如果它沒有被分配,但使用分配的值,如果它是?在Grails/Hibernate中您可以將生成器設置爲僅在未分配時才遞增?
有沒有辦法讓hibernate使用自動生成的id如果它沒有被分配,但使用分配的值,如果它是?在Grails/Hibernate中您可以將生成器設置爲僅在未分配時才遞增?
我相信在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"
}
}