我对Hibernate很新,我在hibernate问题上有这个缓存处理,我找不到答案。
例如,线程A从DB读取数据,并将其保存在与会话A绑定的第一级缓存中,然后线程A休眠几秒钟。同时,另一个线程B在线程A醒来之前修改了DB中的相关数据。然后,检索到的线程A会发生什么,是线程B修改之前的数据还是线程B修改后的数据?
那么如果将数据保存在二级缓存中会发生什么,这会对数据集成产生影响吗?
答案 0 :(得分:2)
"线程A"将看到旧数据,直到它再次从DB读取。
答案 1 :(得分:2)
然后,检索到的数据线程A会发生什么,是数据 在线程B修改之前还是线程B修改后的数据?
线程A仍然只有旧数据。因为each session
有own first level cache
。要获取更新后的数据session
,可以再次致电evict(..)
和load
,也可以调用refresh(...)
方法,假设主题B已将数据保存到数据库。
如果数据保存在二级缓存中会发生什么 这会对数据集成产生影响吗?
行为与上述相同。除此之外,如果您在version
中设置了Entity
属性,则还可以使用session.lock(...)
来检测实体更改。例如:LockMode.READ
检查数据库的version
属性以检测对它的任何更改,即通过二级缓存。