如果我在Grails控制台中执行此代码:
def p = new Post(title: "T");
p.save(flush: true); // or p.save();
Post.count();
GORM没有抛出任何异常,但数据未保存在我的数据库中。我做错了什么?
答案 0 :(得分:35)
您可能违反约束条件。将failOnError: true
添加到您的保存方法参数中。然后,当您的保存失败时,您将收到异常。 (或者你可以检查保存的返回值,如果是假打印出p.errors.allErrors()
。)
验证和保存是一起完成的。如果您正在验证已绑定到某个域对象的用户提交的数据,那么为了检查由于输入无效而导致的保存失败,惯用的事情是检查save的返回值;因无效输入而失败并非例外行为。如果您只想保存对象的内容并希望在出现问题时抛出异常,请使用failOnError
。
有关他们设计GORM的原因的更多理由,以便您需要执行此操作see this article。
答案 1 :(得分:11)
可能违反Post
上的某些约束,因此对象未被保存。请注意,GORM的默认行为不是抛出失败的保存。您需要将其称为
p.save(flush: true, failOnError: true);
或者通过添加
来全局更改行为grails.gorm.failOnError=true
到您的Config.groovy