我正在使用类:
class Account{
static mapping = {
id generator: "uuid2"
}
}
我尝试添加帐户的实例并手动设置其id:
new Account(id: accountId).save(flush:true)
但刷新后,保存对象的id发生了变化。我想保留自动生成id的默认引擎,但我也想添加添加指定id的对象的功能。我如何获得它?Grails 2.4.5在这里。
还有一个来自stacktrace的错误:
消息:com.example.Account实例的标识符已更改从x…到y…
一旦为对象设置了标识符,就不能修改它。这样做会抛出一个异常,就像你得到的那个异常一样。因此,如果你想使用UUId值作为你的id,但想手动分配它,那么你就必须使用"分配"策略,而不是使用"uuid2"生成策略。正确的方法是:
class Account{
UUID id
static mapping = {
id generator: "assigned"
}
}
我修改了@Sandeep Poonia(+1)的答案,最终找到了令人满意的解决方案:
import java.util.UUID
class Account{
UUID id
static mapping = {
id generator: "assigned"
}
def beforeInsert() {
if(!id){
id = UUID.randomUUID().toString()
}
}
}