我应该何时在Grails中的域对象实例上调用save()?

Wee*_*zle 8 grails persistence

根据我的阅读,save()通知持久化上下文应该保存或更新实例.但是,我在服务中有方法可以在不调用的情况下save()更改域实例的属性,并且更改会立即出现在我的数据库中,没问题.

save()方法是否是一种更安全的方式,可以在进行更改(并使用failOnError映射捕获错误)后知道域实例将被更新?是应该在每次更改域实例的属性时使用它还是过度使用它?

sch*_*159 8

如果您创建域类的新实例,则.save()调用将告知基础Hibernate层将新对象持久保存到数据库.没有.save()它就不会被持久化到数据库中.

如果通过a检索对象.get(myId),那么任何更改都将在底层事务结束时自动持久保存到数据库,因为Hibernate将对象视为"脏".事务结束是在对事务服务的方法调用结束或对控制器的请求结束时.您可以.save()在这些情况下调用,但不是必需的.它确实提供了轻松访问冲洗Hibernate .save(flush:true)failOnError用于验证的用途.