2

我使用 Grails,它使用 Hibernate 来实现引擎盖下的持久性。

我的问题是,依赖脏检查是否是一种好习惯,或者save()每次更改实体时我是否应该始终明确地调用实体上的方法?

UPD:这个问题不是关于脏检查机制,这个问题是关于它的可靠性。也就是说,当我想更新一个实体时:

def user = User.get(1)
user.name = 'new name'
user.save()  //optional

我可以省略最后一行,Hibernate 会自己检测到变化并坚持下去,但我能 100% 确定吗?

您是否总是在项目更新后显式调用 save() ?

4

2 回答 2

0

所有实体插入和更新都使用Session.save()& 保存Session.saveOrUpdate()

直到并且除非您在 中触发保存,否则session它们将不再被保存DataBase

一旦你保存了对象,你仍然在修改对象,HibernateDirty checking将出现在图片中。

dirty checking中,hibernate自动检测对象是否被修改(或)是否需要更新。只要对象在persistent stateie 中,就绑定到特定的 Session(org.hibernate.Session)。Hibernate 监视对象的任何更改并执行 sql。

于 2013-02-17T00:10:11.020 回答
0

这里有一些关于脏检查的研究

  1. Fush session 将重置原始状态

    def 患者 = Patient.get(id)

    患者姓名 = 'xxx'

    病人.isDirty() --> 真

    病人.save()

    病人.isDirty() --> 真

    患者.保存(刷新:真)

    病人.isDirty() --> false !! flush 将重置原始状态

  2. Hql 查询也会重置原始状态

    def 患者 = Patient.get(id)

    患者姓名 = 'xxx'

    病人.isDirty() --> 真

    患者.findByXXXX()

    患者.isDirty() --> false

于 2016-11-30T08:26:30.607 回答