我正在上课:
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 ...
答案 0 :(得分:2)
一旦为对象设置了标识符,就无法对其进行修改。这样做会抛出一个例外,就像你得到的那样。因此,如果您想要使用UUId值作为id但想要手动分配它,那么而不是使用" uuid2"生成策略,您必须使用"已分配"战略。正确的方法是:
class Account{
UUID id
static mapping = {
id generator: "assigned"
}
}
答案 1 :(得分:0)
我修改了@Sandeep Poonia(+1)的答案,终于找到了令人满意的解决方案:
import java.util.UUID
class Account{
UUID id
static mapping = {
id generator: "assigned"
}
def beforeInsert() {
if(!id){
id = UUID.randomUUID().toString()
}
}
}