通过GORM手动更新自动生成的ID

时间:2016-05-10 13:35:49

标签: grails grails-2.4

我正在上课:

 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 ...

2 个答案:

答案 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()
              }
        }
  }