我知道一个事实,它[Session](http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html)
是
Hibernate 使用的一级缓存,一旦我们从中检索到一个实体session
,就会从而不是从DB中获取对具有 相同标识符 的 同一实体
的后续get调用,直到is Open 为止。 session``session
话虽如此,我对休眠如何将第一级缓存与数据库同步感到怀疑吗?考虑以下情形
//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
有更新的值吗?session
与DB同步?预先感谢您在此线程上花费的时间和精力
不,除非您明确要求,否则Hibernate不会做任何事情来将会话缓存中的实体状态与数据库同步。
通常这不是问题,因为活动工作通常发生在事务内部,并且事务内部的操作不应该看到其他并发事务所做的更改(但细节取决于隔离级别)。因此,在这种情况下,Hibernate的行为补充了事务隔离的典型语义。
在某些情况下,需要明确同步实体的状态以反映同一事务内部所做的更改。这可能是由于批量更新查询或执行数据库触发器引起的。在这种情况下,您需要通过调用显式请求这种同步refresh()
。
问题内容: 一级缓存与hibernate中的查询缓存是否不同?我看过有关第一级和查询缓存的文章,所以我很困惑。 问题答案: 默认情况下,第一级缓存处于启用状态,并且基于每个会话。默认情况下,查询缓存未启用,它在多个会话之间共享,应始终与二级缓存一起使用。 要启用查询缓存,应使用以下属性:
问题内容: 我知道一个事实,它是 Hibernate 使用的一级缓存,一旦我们从中检索到一个实体,便会从而不是从DB中获取具有 相同标识符 的 同一实体 的后续get调用,直到is Open 为止。 话虽如此,我对hibernate如何将第一级缓存与数据库同步感到怀疑吗?考虑以下情形 所以我的问题是 由于从一级缓存中获取,是否具有更新的值? 如果有人在会话打开时直接更新DB并修改User对象,是否
我知道,会话是Hibernate使用的一级缓存,一旦我们从会话中检索到一个实体,对具有相同标识符的同一实体的后续get调用将从会话(而不是数据库)中提取,直到会话(打开)为止。 话虽如此,我对hibernate如何将一级缓存与DB同步表示怀疑?考虑以下场景 所以我的问题是 由于是从1级缓存中获取的,是否有更新的值? 如果有人在会话打开时直接更新DB并修改User对象,是否与DB同步? 提前感谢您的
问题内容: 在我的Spring驱动的应用程序中,我使用Hibernate(4.2.15.Final)和EhCache(2.6.9)作为第二级缓存,在标准的持久层中进行了设置。 一切正常。但是,将条目放入第二级缓存有时会花费一些时间。 我已经在一个显式文件中配置了域模型类的缓存(我没有配置默认缓存): 在持久性上下文启动时,我收到以下INFO消息记录: 以及执行期间的以下警告 AFAIK 必须调整放
问题内容: 我正在使用Spring + JPA + Hibernate。我正在尝试启用Hibernate的二级缓存。在我的春天,我有: 运行时出现错误: 所以有人抱怨我没有启用二级缓存。我试图通过添加到我的启用它: 但是仍然没有喜悦。我还尝试将其添加到ehcache.xml中: 但这仍然行不通。将更改为也无济于事: 我的实体类被注释为使用缓存 那么,如何启用二级缓存? 编辑: 这是在bean下:
问题内容: 我该如何决定使用哪个? , , , 。 我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但没有足够详细地解释。 问题答案: 在Hibernate文档确实在他们定义了很好的工作: 19.2.2。策略:只读 如果您的应用程序需要读取而不是修改持久类