在服务 class 中的 grails domainObject.save() 未存储在数据库中

In grails domainObject.save() in service class is not storing in database

我正在使用 grails,我正在尝试按顺序存储 3 个模型对象,这些代码已在服务中编写 class。 模型对象之一未存储在数据库中。 我在服务 class 中使用 modelObject.save()。我的方向错了吗,请纠正我。谢谢

使用 flush true :

   domainObject.save(flush: true)

flush: true 强制 Hibernate 立即将所有更改保存到数据库。它对应于所谓的刷新会话。

有关详细信息,请遵循此 link:http://spring.io/blog/2010/06/23/gorm-gotchas-part-1/

谢谢希望这对你有帮助。

您可能在那个实例中遇到了验证错误。不要只调用 save() 并假设一切都有效,而是添加有效性检查以便您可以报告错误或重试,例如

modelObject.save()
if (modelObject.hasErrors()) {
    def errors = modelObject.errors
    // do something here with the `errors`
}
else {
    // do post-save work
}

还有一个选项被推荐得太频繁而且几乎总是错误的选项,那就是将 failOnError:true 添加到 save() 调用中。在处理用户提交的数据时逻辑上很糟糕,因为您应该预料到错误、黑客攻击等,因此通常验证问题不是 exceptional 的发生,不应触发异常。

failOnError:true 的一个不太理论的原因是您触发了一个异常,当有很多异常时会影响性能,因为使用 Groovy 时堆栈帧的数量明显增加(我们都看到了大量的 Groovy 堆栈跟踪)并且填充该数据会产生运行时成本。但是您几乎永远不需要任何堆栈跟踪数据,只需要发生的 errors,正如您在上面看到的那样,可以轻松访问它,而无需人为地减慢异常情况。

考虑使用 failOnError 的类似版本:

try {
    modelObject.save(failOnError:true)
    // do post-save work
}
catch (ValidationException e) {
    def errors = e.errors
    // do something here with the `errors`
}

除了顺序颠倒之外,与之前的代码基本相同,而且这一段浪费了 cpu 周期和内存,并影响了服务器的可扩展性。