我已阅读this post.我无法按照这篇文章中的建议获取整个对象。我得到了 MIN、MAX、Count 值。所以一个新帖子。 以下是我想要的和我拥有的。
- 我的 Spring 应用程序没有对 DB(MySQL) 进行任何更改。它只是读取数据。它不会知道对数据库中现有数据所做的更改。
我的所有查询都返回标量数据。不是整个物体。 (例如:
从...中选择员工.name,office.address,MIN(employee.rec),其中..
)我希望缓存我的查询。因此,我在 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/