Grails:id生成器,使用赋值,如果未赋值,则返回序列
我正在使用Grails3.2.8。我想在生成id时允许这两个选项。是否有一种方法可以使用已分配的,如果未分配,则返回到序列?我尝试在构造函数中获取下一个id并在那里设置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{
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
最后,这是一个非常糟糕的主意——除非你有很好的理由。更新了问题。如果可能的话,你能举个例子吗。我尝试在验证前使用构造函数和函数。我也尝试过在插入之前使用,但在使用任何一种方法时都会遇到问题。布朗先生,谢谢您的时间。您现在已将问题更改为完全不同的问题。更新了问题。如果可能的话,你能举个例子吗。我尝试在验证前使用构造函数和函数。我也尝试过在插入之前使用,但在使用任何一种方法时都会遇到问题。布朗先生,谢谢你抽出时间。你现在把你的问题变成了一个完全不同的问题。