根据我的阅读,save()
通知持久化上下文应该保存或更新实例。但是,我在服务中有方法可以在不调用save()
的情况下更改域实例的属性,并且更改会立即出现在我的数据库中,没问题。
save()
方法是否是一种更安全的方式,可以在进行更改(以及使用failOnError映射捕获错误)后知道域实例是否会更新?是应该在每次更改域实例的属性时使用它还是过度使用它?
答案 0 :(得分:8)
如果创建域类的新实例,则.save()
调用将告知底层Hibernate层将新对象持久保存到数据库中。如果没有.save()
,它将不会持久保存到数据库中。
如果通过.get(myId)
检索对象,那么任何更改都将在底层事务结束时自动持久保存到数据库,因为Hibernate将对象视为“脏”。事务结束是在对事务服务的方法调用结束或对控制器的请求结束时。如果您愿意,可以在这些情况下调用.save()
,但这不是必需的。它确实可以通过.save(flush:true)
或failOnError
用法轻松访问刷新Hibernate以进行验证。