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

时间:2012-02-28 22:00:19

标签: grails persistence

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

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

1 个答案:

答案 0 :(得分:8)

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

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