java - 用于标量查询的 Hibernate 缓存

标签 java hibernate ehcache second-level-cache query-cache

我已阅读this post.我无法按照这篇文章中的建议获取整个对象。我得到了 MIN、MAX、Count 值。所以一个新帖子。 以下是我想要的和我拥有的。

  1. 我的 Spring 应用程序没有对 DB(MySQL) 进行任何更改。它只是读取数据。它不会知道对数据库中现有数据所做的更改。
  2. 我的所有查询都返回标量数据。不是整个物体。 (例如:从...中选择员工.name,office.address,MIN(employee.rec),其中..)

  3. 我希望缓存我的查询。因此,我在 hibernate 配置中启用了查询缓存。并将 cacheable="true" 添加到我的命名查询中。

4.我启用了二级缓存。

5.为持久化类添加了以下注释。

@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

6.我想每 24 小时刷新一次缓存。因此更新了 ehcache.xml defaultCache 中的 timeToLiveSeconds

这是正确的方法吗?如何从查询缓存中得知查询是否命中二级缓存?

更新:我添加了统计信息,二级缓存没有命中/未命中。

最佳答案

打开 SQL 日志记录和统计生成。如果您看到 SQL 查询日志记录,则意味着缓存不起作用。

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>

为了查看二级缓存的命中计数:

session.getSessionFactory().getStatistics().getSecondLevelCacheHitCount()

关于java - 用于标量查询的 Hibernate 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14682395/

相关文章:

java - 无法删除 spring-hibernate 中的实体

java - 集群配置中的 Hibernate 搜索?

java - 缓存不适用于 map

maven - 无法访问net.sf.ehcache.CacheManager,找不到net.sf.ehcache.CacheManager的类文件

java - 在捕获模式下使用hoverfly时出现x509错误

java - 如何在 java ee 6 框架中的 JAX-WS Web 服务中保存数据?

java - 运行时 exec 在执行过程中暂停

java - EntityManagerFactory 中未指定 PersistenceProvider,并且选择的 PersistenceUnitInfo 未指定基于注释的配置

java - ehcache LRU 逐出最近使用的条目

java - 类预期错误。需要简单程序的帮助