当我通过 GORM 检索域实例时,可能存在代码修改该实例/行的危险。特别是因为即使不调用实例上的 .save((,Grails 也会自动保存它。
我之前确保这一点的唯一方法是确保我过去在实例上调用 discard((。有没有更好的方法?
这是针对圣杯 2.2.5
什么版本的 Grails/GORM?
一个选项是在@ReadOnly
(或@Transactional(readOnly = true)
(事务中执行此工作 - 如果尝试写入操作,将引发异常。
如果你想总是需要手动的.save((调用,可以通过改变hibernate.flush.mode来实现,尽管即使这样也有风险。 在大多数情况下,使用 .discard(( 是您最好的选择。 正如 Anton 指出的那样,您可以使用 .isDirty(( 来查找是否有任何更改,但这不会阻止保存的发生。