我在我的应用程序中使用带有hibernate的ehcache。
我可以使用ehcache进行缓存,但我正在努力实现这样的目标:
我想首先缓存我的应用程序中经常使用的数据库表。
缓存表后,如何在我的hql查询中使用它。 就像在我的hql查询中一样,我为各自的db表使用Pojo类名。在这种情况下,我如何使用我的hql查询。
请提供上述文件或支持。
答案 0 :(得分:1)
The documentation of ehcache explains this in detail
基本上,您可以使用@Cache
注释告诉Hibernate对缓存的访问类型。
在ehcache配置中,您可以为每个实体配置一个缓存;班级名称是关键。这允许您定义每个实体缓存的元素数量。
如果您希望Hibernate缓存查询,请将属性hibernate.cache.use_query_cache
设置为true
。当你使用HQL时,Hibernate将“做正确的事情”。
<强> [编辑] 强>
我如何填写缓存?
您可以尝试加载对象,以便在Hibernate需要它们进行某些查询时它们位于缓存中。
但缓存是一个非常复杂的话题。有许多因素允许和阻止使用缓存。如果您只是简单的情况,缓存将“正常工作”,您不需要做任何事情。如果你有复杂的HQL,任何事情都可能发生。我已经看到了相同查询可能需要100ms或10s的示例,具体取决于where
子句中的值。我见过代码,缓存使整个事情变慢。我已经看到了代码,我们从Hibernate会话中请求了底层连接,并且自己完成了所有操作,因为Hibernate根本不符合要求。
通常的做法是尽可能简化代码并在生产中运行结果一段时间。随着时间的推移,用户将开始抱怨它太慢的地方。然后,您可以优化这几个地方。这样,您就不会在用户不关心的代码上浪费时间。