Atualização de registro não está funcionando Grails 4
05/11/2019 17:14
0
Prezados,

Estou tentando atualizar um registro no banco de dados e não estou conseguindo. Não se se é alguma especificidade do Grails 4. 

Eu uso o controlador abaixo e no caso, quero atualizar somente document.partID e document.typeID. Vejam que eu pesquiso o documento pelo seu uuid e ele é encontrado na base. Quando eu executo no Postman, ele me responde que a atualização foi feita com sucesso de acordo com a mensagem que está no render, mas lá no BD nada acontece, o documento permanece tal qual ele estava antes da atualização. 

Alguém sabe o que está acontecendo?


IdController
   ?@Secured(["ROLE_MS_CMBID_SAVE_DOCUMENT"])
def editDocument() {
  JSONObject jsonRequestDoc = request.JSON
  Document document = Document.findByUuid(params.uuidDocument)
  document.partID = "partID teste"
  document.typeID = "typeID teste"
  document.save()
  Map response = ["status":"ok", "message":"Document ${params.uuidDocument} properly updated!!!!!!! "]
  render response as JSON
?}


Document (domain)
class Document {
String uuid
byte[] fields
String signature
static belongsTo = [documentProperties: DocumentProperties]
String partID
String typeID
String owner
//SQL SERVER
static mapping = {
  uuid column: "uuid", sqlType: "nvarchar(max)"
  fields column: "fields", sqlType: "varbinary(MAX)"
  signature column: "signature", sqlType: "nvarchar(max)"
  partID column: "partID", sqlType: "nvarchar(max)"
  typeID column: "typeID", sqlType: "nvarchar(max)"
  owner column: "owner", sqlType: "nvarchar(max)"
  version false
}  
static constraints = {
}
}
Tags: Grails 4, update


0
Acho que talvez não tenha a ver com o Grails 4.
Lembre que o GORM não avisa que algo deu errado de cara: ele falha silenciosamente.
Já tnetou executar o método save tal como objeto.save(failOnError:true)?

Ele irá disparar uma exceção caso alguma inconsistência seja encontrada


0
Kiko,
Boa tarde. Obrigado pela resposta, mas nem com o failOnError ele me disse nada.
Eu encontrei uma solução paliativa com um desenvolvedor da equipe, que funcionou. Eu abri uma transação conforme abaixo:

Document.withTransaction {
?def document = Document.get("1")
?document.partID = "teste partID"
?document.save(flush:true)
}

O código acima funciona corretamente, agora eu só não sei o impacto disso. Se isso sobrecarrega o servidor, se consome mais memória. Realmente eu não sei. Até porque o simples fato de você invocar o método save() da entidade do domínio já deveria ser o suficiente.

Se você tiver essa resposta, por gentileza me informa quais são as consequências de usar o withTransaction.

Obrigado.

Alfredo
06/11/2019 15:49


0
Oi Alfredo, este código não deve impactar em nada seu código, você apenas tornou explícito que o está executando em uma transação.
Muito estranho este comportamento. Qual versão do Grails 4 tá usando? Use a última: 4.0.1


0
Kiko,

Conforme você pediu segue a minha versão do Grails.

root@ReactNative-DEV01:~/grailsProjects/grails4Projects/cmbid# grails -v
Grails Version: 4.0.0
JVM Version: 1.8.0_222
Obrigado!
Alfredo
07/11/2019 09:08


0
Alfredo,

sugiro você migrar pra versão 4.0.1
Se o projeto é novo, sequer recomendo neste momento usar Grails 4, pois ainda é muito imaturo e tende a ter uma quantidade de bugs muito grande.


0
kiko,
Que versão do Grails 3 você acha que está madura para um projeto de construção de APIs para microsserviços escaláveis?
Atenciosamente,
Alfredo
08/11/2019 10:41


0
Totalmente escalável as versões do Grails desde a primeira.
Eu pegaria a 3.3.11. Muito estável, bom desempenho e a migração futura para o Grails 4 vai ser mais tranquila que do Grails 2 pro 3.
Então é um passo pra trás que compensa muito. Inclusive você não perde o código que escreveu: é só copiar pro novo projeto baseado em Grails 3



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto