通过 GORM 手动更新自动生成的 ID
Manually update autogenerated id by GORM
我正在与 class 合作:
class Account{
static mapping = {
id generator: "uuid2"
}
}
我尝试添加帐户实例并手动设置其 ID:
new Account(id: accountId).save(flush:true)
但是刷新后,保存的对象的id正在改变。我想保留自动生成 id 的默认引擎,但我还想添加功能以添加具有 specified id 的对象。我怎样才能得到它?
此处为 Grails 2.4.5。
还有来自堆栈跟踪的错误:
Message: identifier of an instance of com.example.Account was altered
from x... to y...
一旦为对象设置了标识符,您就不能修改它。这样做会抛出一个异常,就像你得到的那样。所以如果你想使用一个 UUId 值作为你的 id 但想手动分配它而不是使用 "uuid2" 生成策略,你将不得不使用 "assigned" 策略。正确的方法是:
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()
}
}
}
我正在与 class 合作:
class Account{
static mapping = {
id generator: "uuid2"
}
}
我尝试添加帐户实例并手动设置其 ID:
new Account(id: accountId).save(flush:true)
但是刷新后,保存的对象的id正在改变。我想保留自动生成 id 的默认引擎,但我还想添加功能以添加具有 specified id 的对象。我怎样才能得到它? 此处为 Grails 2.4.5。
还有来自堆栈跟踪的错误:
Message: identifier of an instance of com.example.Account was altered from x... to y...
一旦为对象设置了标识符,您就不能修改它。这样做会抛出一个异常,就像你得到的那样。所以如果你想使用一个 UUId 值作为你的 id 但想手动分配它而不是使用 "uuid2" 生成策略,你将不得不使用 "assigned" 策略。正确的方法是:
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()
}
}
}