当前位置: 首页 > 面试题库 >

Hibernate一级缓存-是否同步?

金兴朝
2023-03-14
问题内容

我知道一个事实,它[Session](http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html)
Hibernate 使用的一级缓存,一旦我们从中检索到一个实体session,便会从而不是从DB中获取具有 相同标识符同一实体
的后续get调用,直到is Open 为止。 session``session

话虽如此,我对hibernate如何将第一级缓存与数据库同步感到怀疑吗?考虑以下情形

//Lets say I have created the session

Session s1 = sessionFactory.getSession();
User u1 = s1.get(User.class, 1); //Getting User with ID=1
//s1 is not yet closed

//Lets say I create some other session

Session s2 = sessionFactory.getSession();
User u2 = s2.get(User.class, 1); //Getting User with ID=1
u2.setName("Abc"); // Changed a field
s2.save(u2); // Saved the changes to DB
s2.close(); //Closed the 2nd session

//Now when I once again retrieve User with ID=1 from s1, will I get updated User?
User u3 = s1.get(User.class, 1);// Here as per my understanding cache is used

所以我的问题是

  • 由于u3从一级缓存中获取,是否u3具有更新的值?
  • 如果有人在会话打开时直接更新DB并修改User对象,是否session与DB同步?

预先感谢您在此线程上花费的时间和精力


问题答案:

不,除非您明确要求,否则Hibernate不会做任何事情来将会话缓存中的实体状态与数据库同步。

通常这不是问题,因为活动工作通常发生在事务内部,并且事务内部的操作不应该看到其他并发事务所做的更改(但是细节取决于隔离级别)。因此,在这种情况下,Hibernate的行为补充了事务隔离的典型语义。

在某些情况下,需要明确同步实体的状态以反映同一html" target="_blank">事务内部所做的更改。这可能是由于批量更新查询或执行数据库触发器引起的。在这种情况下,您需要通过调用显式请求这种同步refresh()



 类似资料:
  • 我知道,会话是Hibernate使用的一级缓存,一旦我们从会话中检索到一个实体,对具有相同标识符的同一实体的后续get调用将从会话(而不是数据库)中提取,直到会话(打开)为止。 话虽如此,我对hibernate如何将一级缓存与DB同步表示怀疑?考虑以下场景 所以我的问题是 由于是从1级缓存中获取的,是否有更新的值? 如果有人在会话打开时直接更新DB并修改User对象,是否与DB同步? 提前感谢您的

  • 问题内容: 我知道一个事实,它是 Hibernate 使用的一级缓存,一旦我们从中检索到一个实体,就会从而不是从DB中获取对具有 相同标识符 的 同一实体 的后续get调用,直到is Open 为止。 话虽如此,我对休眠如何将第一级缓存与数据库同步感到怀疑吗?考虑以下情形 所以我的问题是 由于是从一级缓存中提取的,因此有更新的值吗? 如果在会话打开时有人直接更新DB并修改User对象,那么是否与D

  • 问题内容: 在工作面试中,一名招聘人员问我“休眠状态中有多少个缓存级别?”。 所以我描述了1级和2级。 他说的是正确的,但也有一个三级缓存,例如,缓存某些不经常更改的表的结果,例如“ CURRENCY”或“ COUNTRY”,然后每隔“ 12/24 /您想要什么时间”重新加载这些表。 我搜索了一下,但是什么也没找到。那么,实际上是否存在第三级缓存还是仅仅是某种功能,如果是,该功能的名称是什么,我该

  • 主要内容:缓存,Hibernate 一级缓存,快照区Hibernate 是一款全自动 ORM 框架,它会在应用程序访问数据时,自动生成 SQL 语句并执行,因此开发人员不需要自己编写 SQL 语句,但这也造成它无法像 MyBatis 一样,能够直接从 SQL 层面严格控制其执行性能以及对数据库的访问频率,所以很容易出现性能不佳的情况。 为此,Hibernate 提供了多种性能优化手段(例如 HQL、懒加载策略、抓取策略以及缓存机制),其中缓存机制是

  • 问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我

  • 本文向大家介绍请简述一下Hibernate的一级缓存、二级缓存以及查询缓存分别是什么?相关面试题,主要包含被问及请简述一下Hibernate的一级缓存、二级缓存以及查询缓存分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:缓存 参考回答: Hibernate的Session提供了一级缓存的功能,默认总是有效的,当应用程序保存持久化实体、修改持久化实体时,Session并不会立即把这种