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

时间:2015-07-22 10:07:44

标签: hibernate caching ehcache second-level-cache query-cache

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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