【发布时间】:2012-09-11 02:11:58
【问题描述】:
我想使用 16 位随机数作为 GORM 创建的所有表的 ID,而不是 GORM 创建的 ID 序列。我需要关于如何做到这一点的帮助。我试过做
静态映射 = { id 生成器:'uuid2' }
它没有工作。帮助表示赞赏
【问题讨论】:
标签: grails grails-orm
我想使用 16 位随机数作为 GORM 创建的所有表的 ID,而不是 GORM 创建的 ID 序列。我需要关于如何做到这一点的帮助。我试过做
静态映射 = { id 生成器:'uuid2' }
它没有工作。帮助表示赞赏
【问题讨论】:
标签: grails grails-orm
如果您只想做一个自定义生成器,您可以扩展 IdentifierGenerator:
class CustomGenerator extends IdentifierGenerator {
Serializable generate(SessionImplementor session, Object object) {
return "myroutine"
}
}
class Book {
String id
static mapping = {
generator:"some.package.CustomGenerator", column:"id", unique:"true"
}
}
【讨论】:
您可以使用简单的映射,例如:
class Book {
static mapping = {
id generator:'assigned'
}
def beforeInsert() {
id = YourRandomGenerator.nextInt()
}
}
注意使用 beforeInsert 事件来分配 id。 问候。
【讨论】:
您可以创建一个自定义 id 生成器,如下所示
public class CustomIdGenerator implements IdentifierGenerator {
public synchronized Serializable generate(final SessionImplementor session, Object obj) {
return GENERATED ID; //return generated id
}
}
现在,如果您希望它仅用于某些特定域.. 然后你可以像这样在映射闭包中做到这一点
mapping = {
id generator:'packagename.CustomIdGenerator'
}
但是如果你想让你的所有域都使用自定义 id 生成器,你可以像这样在 Config.groovy 中指定它,它将适用于所有域
grails {
gorm.default.mapping = {
id column: 'id', generator:'packagename.CustomIdGenerator'
}
}
【讨论】: