GORM手动更新自动生成的id



我正在使用类:

 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…

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

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

最新更新