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

K E*_*est 18 grails groovy grails-orm

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

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

Post.count();
Run Code Online (Sandbox Code Playgroud)

GORM不会抛出任何异常,但数据不会保存在我的数据库中.我究竟做错了什么?

Nat*_*hes 36

您可能违反了约束条款.添加failOnError: true到保存方法参数.然后,当您的保存失败时,您将收到异常.(或者,您可以检查保存的返回值,如果打印错误,则可以p.errors.allErrors().)

验证和保存是一起完成的.如果您正在验证已绑定到某个域对象的用户提交的数据,那么为了检查由于输入无效而导致的保存失败,惯用的事情是检查save的返回值; 因无效输入而失败并非例外行为.如果您只想保存对象的内容并希望在出现问题时抛出异常,请使用failOnError.

有关他们为什么设计GORM以便您需要这样做的理由,请参阅本文.


Ste*_*sen 11

可能Post违反了一些约束,因此没有保存对象.请注意,GORM的默认行为不是抛出失败的保存.你需要调用它

p.save(flush: true, failOnError: true);
Run Code Online (Sandbox Code Playgroud)

或者通过添加全局更改行为

grails.gorm.failOnError=true
Run Code Online (Sandbox Code Playgroud)

到您的Config.groovy