Grails域中的自定义16位ID生成器

时间:2012-09-11 02:11:59

标签: grails gorm

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

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

它没有用。帮助赞赏

3 个答案:

答案 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'
    }
}