我想使用 16 位随机数作为 GORM 创建的所有表的 ID,而不是 GORM 创建的 ID 序列。我需要关于如何做到这一点的帮助。我试着做
静态映射 = { id 生成器:'uuid2' }
它没有用。帮助表示赞赏
我想使用 16 位随机数作为 GORM 创建的所有表的 ID,而不是 GORM 创建的 ID 序列。我需要关于如何做到这一点的帮助。我试着做
静态映射 = { id 生成器:'uuid2' }
它没有用。帮助表示赞赏
如果您只想做一个自定义生成器,您可以扩展 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'
}
}