通过 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()
              }
        }
  }