【问题标题】:Manually update autogenerated id by GORMGORM 手动更新自动生成的 id
【发布时间】:2016-05-11 19:10:58
【问题描述】:

我正在上课:

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

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

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

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

还有来自堆栈跟踪的错误:

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

【问题讨论】:

    标签: grails grails-2.4


    【解决方案1】:

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

    class Account{
          UUID id
    
          static mapping = {
              id generator: "assigned"
          }
     }
    

    【讨论】:

      【解决方案2】:

      我修改了@Sandeep Poonia (+1) 的答案,终于找到了令人满意的解决方案:

        import java.util.UUID
      
        class Account{
              UUID id
      
              static mapping = {
                  id generator: "assigned"
              }
      
              def beforeInsert() {
                    if(!id){
                          id = UUID.randomUUID().toString()
                    }
              }
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-13
        • 2017-08-25
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多