我不想使用GORM创建的ID序列,而是使用16位随机数作为GORM创建的所有表的ID。我需要帮助才能做到这一点。我试着做了
静态映射= { id生成器:'uuid2' }
它没有用。帮助赞赏答案 0 :(得分:9)
如果您只想做自定义生成器,可以扩展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"
}
}
答案 1 :(得分:2)
您可以使用简单的映射,例如:
class Book {
static mapping = {
id generator:'assigned'
}
def beforeInsert() {
id = YourRandomGenerator.nextInt()
}
}
请注意使用beforeInsert事件来分配id。 问候。
答案 2 :(得分:0)
您可以创建自定义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'
}
}