Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails域中的自定义16位ID生成器_Grails_Gorm - Fatal编程技术网

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

Grails域中的自定义16位ID生成器,grails,gorm,Grails,Gorm,我希望使用16位随机数作为GORM创建的所有表的ID,而不是GORM创建的ID序列。我需要帮助,知道怎么做。我试过了 静态映射={ id生成器:“uuid2” } 它不起作用。帮助您可以使用以下简单映射: class Book { static mapping = { id generator:'assigned' } def beforeInsert() { id = YourRandomGenerator.nextInt()

我希望使用16位随机数作为GORM创建的所有表的ID,而不是GORM创建的ID序列。我需要帮助,知道怎么做。我试过了

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


它不起作用。帮助

您可以使用以下简单映射:

class Book {
    static mapping = {
        id generator:'assigned'
     }
    def beforeInsert() {
        id = YourRandomGenerator.nextInt()
    }
}
注意使用beforeInsert事件来分配id。
问候。

您可以使用以下简单映射:

class Book {
    static mapping = {
        id generator:'assigned'
     }
    def beforeInsert() {
        id = YourRandomGenerator.nextInt()
    }
}
注意使用beforeInsert事件来分配id。
您好。

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

如果只需执行自定义生成器,则可以扩展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"
    }
}

您可以创建自定义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生成器,如下所示

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?在您的模拟代码中,您已经编写了生成的ID,但我不确定如何生成下一个ID,如果我想手动生成,您如何生成ID?在模拟代码中,您已经编写了生成的ID,但如果我想手动生成下一个ID,我不确定如何生成