【问题标题】:Custom 16 digit ID Generator in Grails DomainGrails 域中的自定义 16 位 ID 生成器
【发布时间】:2012-09-11 02:11:58
【问题描述】:

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

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

它没有工作。帮助表示赞赏

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    如果您只想做一个自定义生成器,您可以扩展 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"
        }
    }
    

    【讨论】:

    • 谢谢我喜欢为这个查询提供的两种选择。非常感谢
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢我喜欢为这个查询提供的两种选择。非常感谢
    • 这绝对不是最好的方法,请参阅下面的答案,以获得更通用的方法。
    【解决方案3】:

    您可以创建一个自定义 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'
        }
    }
    

    【讨论】:

    • 如何生成id?在您的模拟代码中,您已经编写了 GENERATED ID,但我不确定如何生成下一个 Id,如果我想手动执行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多