【问题标题】:Grails 2.2.5 - domain object not being saved, but no errorsGrails 2.2.5 - 未保存域对象,但没有错误
【发布时间】:2017-10-25 09:48:23
【问题描述】:

我在 Grails 2 2.5 应用程序中遇到了一个令人费解的情况,我的域对象没有被持久化到 MySQL 数据库,但没有返回任何错误。我已经使用 Grails 多年,所以我认为我已经避免了更明显的陷阱,而且我以前从未见过这个陷阱。代码如下:

if (sale.save(flush:true,failOnError: true)) {
 println "nettTotal = "+sale.nettTotal
 map.response = "OK"
 map.sale = sale
} else {
 map.error = "Unable to save sale"
 sale.errors.allErrors.each {
     println it
 }
}

当我运行它时,我看到消息“nettTotal = 290.36”,表明域对象实际上已被保存就 Grails 而言(我没有看到任何错误,如果它有失败的)。然而,当我在 MySQL 数据库中进行选择时,我看到有问题的行保持不变('nett_total' 保持 NULL,其他列也保持不变)。

代码在控制器中运行,没有任何可能无法提交的显式事务。我不知道还能去哪里看。它必须是简单的东西,但我被困住了。

(我不确定这是否相关,但在过去的几周里,这个应用程序一直存在奇怪的问题,存在虚假错误,表明存在某种零星的损坏。例如,以前工作的 findBy* 动态方法突然开始抛出错误,已通过应用程序的“深度清理”清除,即grails clean 并删除了 .grails/2.2.5/projects 中的项目目录。昨天我从未更改的代码中遇到了一个完全神秘的 JSON 错误以前有效,但再次通过深度清洁清理。我不知道为什么会发生这种情况,但它让我担心,我想阻止它)。

【问题讨论】:

  • 您是否尝试过在您的数据源logSql=true 中启用sql 日志记录?可能会给你一些提示
  • 好主意。我刚刚尝试过,结果相当令人惊讶(尽管与数据库的状态一致)。 save() 调用不会导致更新或插入。就好像从来没有发生过一样。那里明显有问题。
  • 顺便说一句,这不是一般问题 - 其他更新正常。
  • 你的数据源被搞砸了,应用程序是例如使用内存数据源?
  • 不,数据源很好。我已经找到了问题的原因以及如何防止它,尽管仍然有一些明显的错误。这是我的答案。

标签: grails


【解决方案1】:

问题出在 Sale 对象中的 def beforeUpdate()。我看不出有什么问题,但是一旦我将其注释掉,对数据库的更新又可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多