我在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错误来自以前工作的未更改的代码,它再次被深层清理所清理。我不确定为什么会这样,但它让我担心,我想要防止它)。
答案 0 :(得分:0)
问题原来是Sale对象中的def beforeUpdate()
。没有什么我可以看到它的错误,但是一旦我评论出来,对数据库的更新再次正常。