Обновление автоматически сгенерированного идентификатора GORM вручную

Я работаю с классом:

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

Я пытаюсь добавить экземпляр учетной записи и вручную установить его идентификатор:

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

но после сброса идентификатор сохраненного объекта меняется. Я хотел бы оставить механизм автогенерации идентификатора по умолчанию, но я также хочу добавить функциональность для добавления объекта с указанным идентификатором. Как я могу получить это? Граальс 2.4.5 здесь.

И ошибка от stacktrace:

Сообщение: идентификатор экземпляра com.example.Account был изменен с x... на y...

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

Вы не можете изменить идентификатор, как только он был установлен для объекта. Это вызовет исключение, подобное тому, которое вы получаете. Поэтому, если вы хотите использовать значение UUId в качестве идентификатора, но хотите назначить его вручную, тогда вместо использования стратегии генерации "uuid2" вам придется использовать "назначенную" стратегию. Правильный путь будет:

class Account{
      UUID id

      static mapping = {
          id generator: "assigned"
      }
 }
Другие вопросы по тегам