1

我想使用 16 位随机数作为 GORM 创建的所有表的 ID,而不是 GORM 创建的 ID 序列。我需要关于如何做到这一点的帮助。我试着做

静态映射 = { id 生成器:'uuid2' }

它没有用。帮助表示赞赏

4

3 回答 3

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"
    }
}
于 2012-09-11T03:22:59.023 回答
2

您可以使用简单的映射,例如:

class Book {
    static mapping = {
        id generator:'assigned'
     }
    def beforeInsert() {
        id = YourRandomGenerator.nextInt()
    }
}

注意使用 beforeInsert 事件来分配 id。问候。

于 2012-09-11T03:17:52.797 回答
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'
    }
}
于 2016-08-01T15:59:51.993 回答