Обновление автоматически сгенерированного идентификатора 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"
}
}