为什么GORM没有保存我的对象?

时间:2012-02-07 13:59:34

标签: grails groovy gorm

如果我在Grails控制台中执行此代码:

def p = new Post(title: "T");
p.save(flush: true); // or p.save();

Post.count();

GORM没有抛出任何异常,但数据未保存在我的数据库中。我做错了什么?

2 个答案:

答案 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