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