java - Hibernate Session如何处理并发性能

标签 java multithreading hibernate

我对 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/

相关文章:

php - 为 PHP 版本 5.6.2 启用线程安全

c# - 多线程系统.Windows.图形

java - liquibase 前提条件的最佳实践

java - 在抛出异常时配置 ResponseEntity 主体

java - 在两个零旁边转义空字节

java - JPA EntityManager 在删除时不会引发约束违规

java - 使用JPA将arraylist存储在mysql数据库中

java - Android - 获取支持的语言环境列表

Java JProgressBar 不通过 setVisible(true) 显示

java - JPA 清除集合并添加新项目