(快速参考)

保存

目的

保存一个新的领域类实例或更新数据库中修改后的持久性实例,如有需要,层叠更新到子实例。

示例

def b = new Book(title: "The Shining")
b.save()

说明

save 方法通知持久性上下文该实例应被保存或更新。除非使用了 flush 参数,否则对象不会立即持久保存

b.save(flush: true)

如果验证失败,实例未被持久保存,则 save 方法会返回 null,如果是成功,则返回实例本身。这可让你使用“Groovy 真值”(null 被认为是 false) 编写像以下这样的代码

if (!b.save()) {
    b.errors.allErrors.each {
        println it
    }
}

参数

  • validate(可选) - 若应跳过验证,设置为 false

  • flush(可选) - 若设为 true 将刷新持久性上下文,立即持久保存对象,并为乐观锁更新 version

  • insert(可选) - 若设为 true 将强制 Hibernate 执行 SQL INSERT;在某些情况下(例如使用分配的 ID 时)这很有用,且 Hibernate 无法检测是否执行 INSERT 或 UPDATE

  • failOnError(可选) - 若设为 truesave 方法将在验证失败时抛出 grails.validation.ValidationException。设置 grails-app/conf/application.groovy 中的 grails.gorm.failOnError 属性也可以触发此行为。如果已设置 Config 属性,且将参数传递给该方法,则该方法参数将始终优先。有关配置属性和其他 GORM 配置选项的更多详细信息,请参阅用户指南的GORM 配置选项部分。

  • deepValidate(可选) - 确定域实例的关联是否也应被验证,即是否验证级联。默认情况下这是 true - 设置为 false 以禁用级联验证。

默认情况下,GORM 类被配置用于 乐观锁定,这是 Hibernate 的一项功能,它包括在表中存储一个递增版本。此值仅在刷新 Hibernate 会话时在数据库中更新。