我对 Hibernate 很陌生,我对 Hibernate 问题有这个缓存处理,但我找不到答案。
例如,线程A从DB中读取数据,并将其保存在与 session A绑定(bind)的一级缓存中,然后线程A hibernate 几秒钟。与此同时,另一个线程B在线程A醒来之前修改了DB中的相关数据。那么,线程A取回的数据会发生什么变化,是线程B修改前的数据还是线程B修改后的数据呢?
那么如果将数据保存在二级缓存中会发生什么情况,会对数据集成产生影响吗?
最佳答案
Then, what will happen to the data Thread A retrieved, is it the data before Thread B modified or the data after Thread B modified?
线程 A 仍然只有旧数据。因为,每个 session
都有其自己的一级缓存
。要获取更新的数据,session
可以调用 evict(..)
并再次load
,或者调用 refresh(... )
方法假设线程 B 已将数据保存到数据库。
Then what will happen if data is saved in second level cache, will that make differences on data integration?
行为与上面相同。除此之外,如果您在 Entity
中设置了 version
属性,您还可以使用 session.lock(...)
来检测实体变化。例如:LockMode.READ
根据数据库检查 version
属性以检测对其的任何更改,即也绕过二级缓存。
关于java - Hibernate Session如何处理并发性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35837410/