Hibernate Session如何处理并发性能

时间:2016-03-07 06:21:56

标签: java multithreading hibernate

我对Hibernate很新,我在hibernate问题上有这个缓存处理,我找不到答案。

例如,线程A从DB读取数据,并将其保存在与会话A绑定的第一级缓存中,然后线程A休眠几秒钟。同时,另一个线程B在线程A醒来之前修改了DB中的相关数据。然后,检索到的线程A会发生什么,是线程B修改之前的数据还是线程B修改后的数据?

那么如果将数据保存在二级缓存中会发生什么,这会对数据集成产生影响吗?

2 个答案:

答案 0 :(得分:2)

"线程A"将看到旧数据,直到它再次从DB读取。

答案 1 :(得分:2)

  

然后,检索到的数据线程A会发生什么,是数据   在线程B修改之前还是线程B修改后的数据?

线程A仍然只有旧数据。因为each sessionown first level cache。要获取更新后的数据session,可以再次致电evict(..)load,也可以调用refresh(...)方法,假设主题B已将数据保存到数据库。

  

如果数据保存在二级缓存中会发生什么   这会对数据集成产生影响吗?

行为与上述相同。除此之外,如果您在version中设置了Entity属性,则还可以使用session.lock(...)来检测实体更改。例如:LockMode.READ检查数据库的version属性以检测对它的任何更改,即通过二级缓存。