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

使用Spring休眠第二级缓存

苍意智
2023-03-14
问题内容

我正在使用Spring + JPA +
Hibernate。我正在尝试启用Hibernate的二级缓存。在我的春天,applicationContext.xml我有:

<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>

运行时出现错误:

Caused by: org.hibernate.HibernateException: Could not instantiate cache implementation
     at org.hibernate.cache.CacheFactory.createCache(CacheFactory.java:64)

Caused by: org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]
     at org.hibernate.cache.NoCacheProvider.buildCache(NoCacheProvider.java:21)

所以有人抱怨我没有启用二级缓存。我试图通过添加到我的启用它applicationContext.xml

<prop key="hibernate.cache.use_second_level_cache">true</prop>

但是仍然没有喜悦。我还尝试将其添加到ehcache.xml中:

<property name="hibernate.cache.use_second_level_cache">true</property>

但这仍然行不通。将更provider_class改为org.hibernate.cache.EhCacheProvider也无济于事:

<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>

我的实体类被注释为使用缓存

@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)

那么,如何启用二级缓存?

编辑: 这是在bean下:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">

解决: 由于我正在使用LocalEntityManagerFactoryBean它,因此从获得它的设置META- INF/persistence.xml。我的设置applicationContext.xml甚至都没有被读取。


问题答案:

我没有回答,但是发帖人自己找到答案并不明显。我正在重新发布他的答案:

解决

由于我正在使用,LocalEntityManagerFactoryBean因此它从获取设置META- INF/persistence.xml。我的设置applicationContext.xml甚至都没有被读取。



 类似资料:
  • 问题内容: 我目前正在使用 Spring MVC4 和 hibernate 4 开发应用程序。我已经实现了 hibernate二级缓存, 以提高性能。如果我使用 Redis ,它是内存中的数据结构存储,用作数据库,缓存等,性能会提高,但是会发生巨大变化吗? 问题答案: 如果您缓存什么是要缓存的东西,并避免缓存根本不应该缓存的数据,则可能会出现巨大的差异。情人眼中的美丽就像表演一样。使用hibern

  • 问题内容: 我无法理解hibernate何时进入二级缓存以及何时使缓存失效。 这是我目前所了解的: 第二级缓存在会话之间存储实体,作用域为SessionFactory 您必须告诉要缓存的实体,默认情况下不会缓存任何实体 查询缓存将查询结果存储在缓存中。 我不明白的是 hibernate何时会命中此缓存? 假设我已经设置了二级缓存,但没有设置查询缓存。我想缓存我的客户,其中有50000。我可以通过哪

  • 问题内容: 一级缓存与hibernate中的查询缓存是否不同?我看过有关第一级和查询缓存的文章,所以我很困惑。 问题答案: 默认情况下,第一级缓存处于启用状态,并且基于每个会话。默认情况下,查询缓存未启用,它在多个会话之间共享,应始终与二级缓存一起使用。 要启用查询缓存,应使用以下属性:

  • 问题内容: 在我的Spring驱动的应用程序中,我使用Hibernate(4.2.15.Final)和EhCache(2.6.9)作为第二级缓存,在标准的持久层中进行了设置。 一切正常。但是,将条目放入第二级缓存有时会花费一些时间。 我已经在一个显式文件中配置了域模型类的缓存(我没有配置默认缓存): 在持久性上下文启动时,我收到以下INFO消息记录: 以及执行期间的以下警告 AFAIK 必须调整放

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

  • 问题内容: 我该如何决定使用哪个? , , , 。 我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但没有足够详细地解释。 问题答案: 在Hibernate文档确实在他们定义了很好的工作: 19.2.2。策略:只读 如果您的应用程序需要读取而不是修改持久类