Grails:id生成器,使用赋值,如果未赋值,则返回序列

Grails:id生成器,使用赋值,如果未赋值,则返回序列,grails,gorm,auto-increment,database-sequence,Grails,Gorm,Auto Increment,Database Sequence,我正在使用Grails3.2.8。我想在生成id时允许这两个选项。是否有一种方法可以使用已分配的,如果未分配,则返回到序列?我尝试在构造函数中获取下一个id并在那里设置id,但遇到了问题。任何帮助/指导都将不胜感激 class Foo { static mapping = { id generator:'assigned' } } vs 我尝试过使用映射设置为assigned,并在的域构造函数中设置id,然后再验证函数。他们都不为我工作。下面的例子 class Foo{

我正在使用Grails3.2.8。我想在生成id时允许这两个选项。是否有一种方法可以使用已分配的,如果未分配,则返回到序列?我尝试在构造函数中获取下一个id并在那里设置id,但遇到了问题。任何帮助/指导都将不胜感激

class Foo {
  static mapping = {
    id generator:'assigned'
  }
}
vs

我尝试过使用映射设置为
assigned
,并在
的域构造函数中设置id,然后再验证
函数。他们都不为我工作。下面的例子

class Foo{
    Foo(){          
        def id = Foo.find("from Foo order by id desc")
        id = id ? id : 0
        this.id = id
    }
    static mapping = {
        id generator:'assigned'
    }
}

class Foo{
    def beforeValidate() {
        def id = Foo.find("from Foo order by id desc")
        id = id ? id : 0
        this.id = id
    }
    static mapping = {
        id generator:'assigned'
    }
 }
提前感谢你的帮助

是否有一种方法可以使用已分配的并返回到顺序(如果有) 未分配的

不,反正不是直接的。您可以使用
assigned
,当您想返回序列时,可以向数据库发送查询以检索下一个序列值,然后自己分配它。我想这可能是你能得到的最接近的了

是否有一种方法可以使用已分配的并返回到顺序(如果有) 未分配的


不,反正不是直接的。您可以使用
assigned
,当您想返回序列时,可以向数据库发送查询以检索下一个序列值,然后自己分配它。我想这可能是你能得到的最接近的了。

首先,你需要理解
HQL
;在您的示例中,您返回的是
Foo
而不是
id
,因此它显然是错误的

其次,您不应该依赖
获取
id
的下一个值,因为它不能保证是正确的——您可能会遇到
id
不是唯一的错误

第三,您没有增加
id
,这样每次都会得到相同的
0

以下是您可以执行的操作,使用数据库
序列
——取决于数据库

"select id_seq.nextval from dual" // for Oracle

最后,这是一个非常糟糕的主意——除非你有很好的理由。

首先,你需要理解
HQL
;在您的示例中,您返回的是
Foo
而不是
id
,因此它显然是错误的

其次,您不应该依赖
获取
id
的下一个值,因为它不能保证是正确的——您可能会遇到
id
不是唯一的错误

第三,您没有增加
id
,这样每次都会得到相同的
0

以下是您可以执行的操作,使用数据库
序列
——取决于数据库

"select id_seq.nextval from dual" // for Oracle

最后,这是一个非常糟糕的主意——除非你有很好的理由。

更新了问题。如果可能的话,你能举个例子吗。我尝试在验证前使用构造函数和
函数。我也尝试过在插入之前使用
,但在使用任何一种方法时都会遇到问题。布朗先生,谢谢您的时间。您现在已将问题更改为完全不同的问题。更新了问题。如果可能的话,你能举个例子吗。我尝试在验证前使用构造函数和
函数。我也尝试过在插入之前使用
,但在使用任何一种方法时都会遇到问题。布朗先生,谢谢你抽出时间。你现在把你的问题变成了一个完全不同的问题。