默认使用 hibernate/ehcache 缓存所有查询?

Cache all queries by default using hibernate/ehcache?

我们的应用程序处理只读数据,因此我们正在考虑对所有查询使用 Hibernate 查询缓存功能(由 ehcache 实现)。

到目前为止,我们启用了二级缓存和查询缓存:

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

然后告诉 hibernate 每个查询都是可缓存的:

query.setHint("org.hibernate.cacheable", true);

我可以从这种方法中找出两个缺点:

有没有办法实现这一点,即缓存所有查询,仅使用配置文件?

谢谢!

不,没有,因为那没有多大意义(或者更好地说,它在 99.99% 的用例中都没有用)。

对于查询和输入参数(绑定变量)的每种组合,缓存中总是有一个不同的条目。

应该为 select 来自很少更改(插入、更新、删除)实体(表)且不会有大量组合的查询启用查询缓存不同的输入参数。

在我的应用程序中能够缓存所有查询是有意义的。我有一个又大又旧的应用程序,即使在同一个事务中,它最终也会重复很多查询。如果该应用程序可以在请求期间缓存所有查询的查询结果,那么该应用程序将 运行 更快并且不会使用更多内存。为了简化起见,我将缓存设置为 10 秒,然后我的应用程序将显着加快。