【问题标题】:Why is GORM not saving my object?为什么 GORM 不保存我的对象?
【发布时间】:2012-02-28 22:59:39
【问题描述】:

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

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

Post.count();

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

【问题讨论】:

  • 在我的情况下,我有另一部分代码正在删除我的行,就在创建新行之后...... :(

标签: grails groovy grails-orm


【解决方案1】:

您很可能违反了约束。将failOnError: true 添加到您的保存方法参数中。然后当你的保存失败时你会得到一个异常。 (或者,您可以检查保存的返回值,如果它是错误的,则打印出p.errors.allErrors()。)

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

更多关于他们设计 GORM 的基本原理,以便您需要这样做see this article

【讨论】:

  • 你也可以在你的域对象上使用 'validate()',如果它返回 false,不要调用它的 'save()' 方法。而是让控制器向用户返回一条消息。
  • 如果我设置了 failOnError:true 并且没有异常,而对象被 Grails 标记为“未保存”怎么办?
  • 另外,我试图在错误对象列表中找到错误消息。到目前为止还没有运气。
【解决方案2】:

可能违反了Post 的某些约束,因此对象没有被保存。请注意,GORM 的默认行为不是在保存失败时抛出。您需要像这样称呼它

p.save(flush: true, failOnError: true);

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

grails.gorm.failOnError=true

到你的 Config.groovy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2018-10-26
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多