hibernate - 为什么 Grails 在域对象保存时不通知我错误?

标签 hibernate grails

我刚从 Grails 开始,这是第一个问题。

我花了几个小时才发现域对象不能插入 DB,直到它的所有属性都被填充。

class Item {
  String title
  String link
}

class ItemController {
  def fetch = {
    def item = new Item()
    item.title = "blabla"
    // no value for "link"
    item.save()
  }
}

看起来很合乎逻辑,但为什么它会如此无声地跳过?在这种情况下,我可以配置一些东西来获得异常(exception)吗?

谢谢

最佳答案

默认不抛出异常。
save()注入(inject)到域类的方法返回 false如果在验证阶段发生错误。
用于检查域类的保存/更新的经典代码示例是:

if (!myDomainObj.save()) {
   log.warn myDomainObj.errors.allErrors.join(' \n') //each error is an instance of  org.springframework.validation.FieldError    
}

如果您需要为特定域类设置异常,请使用:
myDomainObj.save(failOnError: true)

并且将抛出验证失败的异常。

如果你想为每个域类抛出异常,那么只需设置 grails.gorm.failOnErrortrue在 grails-app/conf/Config.groovy

注意:所有域属性都有一个隐含的 nullable: false约束。

我推荐你阅读this article .

关于hibernate - 为什么 Grails 在域对象保存时不通知我错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765037/

相关文章:

spring - 没有@EmbeddedId 或@IdClass 的 super 简单复合键

hibernate - 运行时异常 :Use of @OneToMany or @ManyToMany targeting an unmapped class

java - 如何在游戏中存储具有固定值的枚举

java - Tomcat 404页面错误

grails - 在遗留数据库之上的 Grail 中建模多对多关系

java - 理解 Hibernate 内部结构的最佳方式

java - Hibernate 注释放置问题

hibernate - 仅在某些领域类或具有多个数据库的 Grails 项目上使用 GORM 的 Grails

java - 输入数据未存储在数据库中 - 为什么?

hibernate - Grails:生成自定义 ID