首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Groovy/Grails中将更新正确地保存到域对象

如何在Groovy/Grails中将更新正确地保存到域对象
EN

Stack Overflow用户
提问于 2019-04-20 02:44:37
回答 3查看 549关注 0票数 0

我开始接触我的组织的Groovy/Grails后端,并负责更新我们的Document域对象上的User。问题是,在从附加了正确参数的前端命中更新端点后,后端使用一个未更改的Document对象进行响应。

代码如下:

代码语言:javascript
复制
 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

前端返回一个promise,我正在记录promise响应,它显示了一个未更改的文档对象,并附加了完全相同的用户。我没有收到400,所以看起来联系人已经成功找到了。

我尝试将flush:true添加到user.save调用和document.save调用中,但无济于事。

我的代码中有什么明显的错误吗?

EN

回答 3

Stack Overflow用户

发布于 2019-04-20 11:43:28

数据库操作应该在服务中,而不是在控制器中,使用@Transactional,最好是gorm版本,而不是spring版本。你不需要使用flush: true。然后,您可以从服务返回到控制器,并呈现为JSON。

票数 0
EN

Stack Overflow用户

发布于 2019-04-20 20:56:09

您没有声明您在服务器上看到了debug语句,表明找到了一个用户,也许它实际上永远不会进入这一部分?

我假设所提供的代码是不完整的,因为我们没有看到返回的survey包含正在更新的document。而且大括号看起来不平衡,似乎存在控制流问题。(即为什么有2个左大括号,但有3个右大括号?)

我建议您在代码上使用调试器来查看控制是如何实际流动的。大多数Java支持简单的调试,本质上是单击调试按钮而不是运行按钮。设置一些分散在这段代码中的断点,以捕获请求并从前端调用API端点。

票数 0
EN

Stack Overflow用户

发布于 2019-04-24 15:16:36

文档是父级吗?是否使用子对象?

User.addTodocument(someUser)

然后是Document.merge()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55766387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档