0

我们的应用程序处理只读数据,因此我们正在考虑对所有查询使用 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);

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

  • 代码冗余(因为您必须为每个查询手动添加提示)

  • hibernate 依赖(到目前为止,代码从直接的
    hibernate 引用中清除,仅使用 JPA 注释)

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

谢谢!

4

2 回答 2

1

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

对于查询和输入参数(绑定变量)的每个组合,缓存中始终存在不同的条目。

对于从很少更改(插入、更新、删除)且不会有大量不同输入参数组合的实体(表)中选择的查询,应启用查询缓存。

于 2015-07-22T12:00:12.510 回答
0

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

于 2017-10-25T20:35:53.470 回答