繁体   English   中英

Hibernate一级缓存和get方法

[英]Hibernate first level cache and get method

我已经读过session.get(Employee.class, new Long(1))方法将从缓存或数据库中获取数据。

如果有两个用户同时访问该应用程序。

如果用户 - > User1正在执行get,则将从DB检索数据。 现在数据被移动到缓存。
如果用户 - > User2已删除记录或更新记录。 然后
如果用户 - > User1正在执行get,那么将从缓存中检索数据。

Isnt User1正在获取旧数据。 它是否属于缓存的陷阱。 或者我在这里遗漏了什么?

我可以说这就是为什么User1在同一个会话中做了2次session.get 但我仍然需要不同的意见。

您可以正确理解它:缓存绑定到会话,如果将对象加载到第一级缓存中,则不会使用#get()执行SQL。 您可以使用#evict()从缓存中清除一个对象,或使用#clear()清除缓存中的每个对象,而无需关闭会话。 关闭会话将始终删除整个缓存。

在这里看一个很好的解释。

您需要阅读有关Container管理的实体管理器的更多信息

Java EE环境中最常用且最广泛使用的实体管理器是容器管理的实体管理器。 在此模式下,容器负责实体管理器的打开和关闭(这对应用程序是透明的)。 它还负责交易边界。 通过依赖注入或通过JNDI查找在应用程序中获取容器管理的实体管理器。容器管理的实体管理器需要使用JTA事务。

它可以响应你想要理解和存档的内容以及如何使用它。 更多doucmentation Entity Mananger

不,因为Hibernate会在缓存上保存数据,但无论您是使用Hibernate更新数据,它都会知道存在一些变化。 如果使用SQL更新数据,或者Hibernate无法看到发生的事情,您将遇到麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM