【发布时间】:2017-03-28 15:29:28
【问题描述】:
在我的服务类(注解为 Transactional)中,我更新对象并将其另存为:
myObj.save(flush:true) //(Thread A, updates the value, Step A)
在此之后,会进行需要很长时间的数据处理。在此处理期间,在域类中进行了很多更改,但这些更改与此处无关。由于所有这些处理都发生在同一个服务类中,因此它是单个事务的一部分。
现在,与此同时,当所有这些处理正在进行时,另一个线程,它是不同休眠会话的一部分,访问
MyObj.findAll() //Thread B 在结果集中我看到了更新的值。 Step A 中更新的值 但是,线程 A 尚未完成,因此尚未将更改提交到数据库。我可以确认这一点,因为同时如果我直接在 mysql 工作台中运行查询,那么我看不到更改。仅当通过休眠访问对象时更改可见。
我的印象是,如果由于刷新而进行了更改,那么这些更改在同一个事务中可见,而在其他事务中不可见。有人可以澄清一下吗?
【问题讨论】:
标签: mysql hibernate grails grails-orm