Как правильно сохранять обновления для доменных объектов в Groovy / Grails - PullRequest
0 голосов
/ 19 апреля 2019

Я начинаю касаться серверной части Groovy / Grails своей организации, и мне поручено обновить User нашего доменного объекта Document.Проблема заключается в том, что после нажатия на конечную точку обновления с внешнего интерфейса с правильными присоединенными параметрами бэкэнд отвечает неизменным Document объектом.

Вот код:

 if (requestParams.userEmail) {
    def contact = User.findByEmail(requestParams.userEmail)
    log.debug('Reading user found by passed email contact={} error={}',contact, contact.errors.allErrors.inspect())

    if (!contact) {
       response.status = 400
       render WebserviceError.badInput as JSON
       return
    }

    document.user = contact
    document.user.save(flush: true)
 }
 document.save(flush: true)
 render survey as JSON

frontend возвращает обещание, и я записываю ответ на обещание, и он показывает неизмененный объект Document с точно таким же прикрепленным пользователем.Я не получаю 400, поэтому похоже, что контакт успешно найден.

Я попытался добавить flush:true к вызову user.save и к вызову document.save, но это не помогло.

Есть ли явные нарушения в моем коде?

Ответы [ 3 ]

0 голосов
/ 20 апреля 2019

Вы не утверждаете, что видите на сервере оператор отладки, указывающий на найденного пользователя, возможно, он никогда не попадал в этот раздел?

Я предполагаю, что предоставленный код неполон, поскольку мы не видим, что возвращаемое survey содержит обновляемое document. А также брекеты выглядят неуравновешенными, как будто существует проблема с потоком управления. (то есть, почему есть 2 открывающие скобки, но 3 закрывающие скобки?)

Я бы посоветовал вам использовать отладчик в своем коде, чтобы увидеть, как на самом деле осуществляется управление. Большинство Java IDE поддерживают простую отладку, по сути, нажимая кнопку отладки, а не кнопку запуска. Задайте количество точек останова, пропущенных через этот код, чтобы перехватывать запросы и вызывать конечную точку API из вашего внешнего интерфейса.

0 голосов
/ 24 апреля 2019

Является ли Document родителем?Пользователь дочерний?

User.addTodocument (someUser)

затем Document.merge ()

0 голосов
/ 20 апреля 2019

Ну, операции с БД должны быть в сервисе, а не в контроллере, с использованием @Transactional, предпочтительно версия gorm, а не версия spring.Вам не нужно использовать flush: true.Затем из службы вы можете вернуться к контроллеру и отобразить его как JSON.

...