Как изменить значение столбца ID (или столбцов) в режиме редактирования в Grails 3? - PullRequest
0 голосов
/ 01 марта 2019

Как вы разрешаете изменять значения столбцов ID во время выполнения в Grails 3?В моем случае у меня есть таблица с составным первичным ключом, состоящим из трех столбцов.Я вручную указал их для отображения в режиме редактирования, и мой код метода update() выглядит следующим образом:

@Transactional
def update(AliasFrequencyDict aliasFrequencyDict) {

    aliasFrequencyDict = AliasFrequencyDict.get( new AliasFrequencyDict(params) )

    if (aliasFrequencyDict == null) {
        notFound()
        return
    }

    aliasFrequencyDict.properties = params

    try {
        aliasFrequencyDict.save(insert: false, flush: true)
    } catch (ValidationException e) {
        respond aliasFrequencyDict.errors, view:'edit'
        return
    }

    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.updated.message', args: [message(code: 'aliasFrequencyDict.label', default: 'AliasFrequencyDict'), aliasFrequencyDict.getPK()])
            redirect(action: 'show', params: params)
        }
        '*'{ respond aliasFrequencyDict, [status: OK] }
    }
}

... и когда я перехожу в представление редактирования и редактирую свойство, не являющееся частью ключа, он сохраняется правильно, но как только я изменяю один из них, я получаю сообщение о том, что Grails не может найти экземпляр AliasFreuqencyDict с идентификатором null.Я предполагаю, что проблема в том, что, как только вы меняете один из таких столбцов, идентификатор тоже меняется, и Grails почему-то не знает, как переключиться с первичного ключа, который был у объекта, на новые.

Как мне изменить контроллер так, чтобы он также позволял редактировать столбцы части ключа?

1 Ответ

0 голосов
/ 05 марта 2019

(Самая очевидная) проблема здесь в том, как вы ищете тот, который хотите обновить.Если вы поделитесь своей моделью домена для AliasFrequencyDict, я могу быть более конкретным, но, скажем, у вас есть составной ключ First и Last и экземпляр, где [first:"John", last:"Doe"].

Теперь вы обновляете его доустановите first=Jane и нажмите обновить ... вы создаете новый AliasFrequencyDict для "Jane Doe" и используете его при поиске .get(), конечно, он не будет возвращать экземпляр AliasFrequencyDict.Если вы изменяете значение поля PK, вам нужно будет передать старые значения, чтобы найти объект, а затем установить новые значения соответствующим образом.

...