在Grails中将自定义ID生成定义为默认值的最佳方法是什么?

aha*_*son 6 grails grails-orm

我想切换我的域类以使用可变长度的UUID作为它们的ID.我不想简单地在URL上显示顺序ID以供人们尝试使用.我编写了一个Java UUID方法的自定义版本以允许可变长度,因此我可以为不会变大的模型使用更短的ID.

我发现这个线程解释了如何修改默认映射,以便我可以更改为"已分配". 修改Grails插件的ID生成

什么是配置默认的beforeInsert(生成自定义UUID)并告诉Grails的最佳方法我想使用字符串代替整数?

我尝试将grails.gorm.default.beforeInsert添加到配置中,但这不起作用.

ata*_*lor 8

要使grails为id使用字符串,只需声明一个属性即可String id.要使用自定义UUID填充它,我将使用hibernate id生成器而不是beforeInsert.创建一个扩展的类org.hibernate.id.IdentifierGenerator,然后将这样的id生成器映射添加到您的域类:

class MyIdGenerator extends IdentifierGenerator {
    Serializable generate(SessionImplementor session, Object object) {
        return MyUUID.generate()
    }
}

class MyDomain {
    String id
    static mapping = {
        id generator:"my.package.MyIdGenerator", column:"id", unique:"true"
    }
}
Run Code Online (Sandbox Code Playgroud)