0

我正在上课:

 class Account{
      static mapping = {
          id generator: "uuid2"
      }
 }

我尝试添加帐户实例并手动设置其 ID:

new Account(id: accountId).save(flush:true)

但刷新后,保存对象的 id 正在改变。我想保留自动生成 ID 的默认引擎,但我还想添加功能以添加具有指定ID 的对象。我怎样才能获得它?Grails 2.4.5 在这里。

来自堆栈跟踪的错误:

消息:com.example.Account 实例的标识符已从 x... 更改为 y...

4

2 回答 2

2

一旦为对象设置了标识符,就不能修改它。这样做会抛出一个异常,就像你得到的那样。因此,如果您想使用 UUId 值作为您的 ID,但又想手动分配它,那么您将不得不使用“分配”策略,而不是使用“uuid2”生成策略。正确的方法是:

class Account{
      UUID id

      static mapping = {
          id generator: "assigned"
      }
 }
于 2016-05-11T08:58:20.310 回答
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()
              }
        }
  }
于 2016-05-11T11:10:58.873 回答