在服务 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 周期和内存,并影响了服务器的可扩展性。
我正在使用 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 周期和内存,并影响了服务器的可扩展性。