确保不改变或修改域类实例的最佳方法是什么

时间:2018-05-09 19:34:48

标签: grails gorm

当我通过GORM检索域实例时,可能存在代码修改该实例/行的危险。特别是因为即使没有在实例上调用.save(),Grails也会自动保存它。

我之前确保这一点的唯一方法是确保我过去在实例上调用discard()。还有更好的方法吗?

这是Grails 2.2.5

2 个答案:

答案 0 :(得分:2)

什么版本的Grails / GORM?

一个选项是在@ReadOnly(或@Transactional(readOnly = true))事务中执行此操作 - 如果尝试执行写操作,则会抛出异常。

答案 1 :(得分:0)

如果你想要总是需要手动.save()调用,那么可以通过改变hibernate.flush.mode来实现这一点,尽管它有风险。在大多数情况下,使用.discard()是最好的选择。正如Anton指出的那样,您可以使用.isDirty()来查明是否有任何更改,但这不会阻止保存的发生。