我在我的应用程序中使用带有休眠功能的 ehcache。
我可以使用 ehcache 进行缓存,但我正在尝试实现以下目标:
我只想缓存最初在我的应用程序中经常使用的数据库表。
缓存表后,我如何在我的 hql 查询中使用它。就像在我的 hql 查询中一样,我对各自的 db 表使用 Pojo 类名。在这种情况下,我如何使用我的 hql 查询。
请为上述提供一些文档或支持。
基本上,您可以使用@Cache
注解来告诉 Hibernate 访问缓存的类型。
在ehcache配置中,可以为每个实体配置一个缓存;类名是关键。这允许您定义每个实体要缓存多少元素。
如果您希望 Hibernate 缓存查询,请将属性设置hibernate.cache.use_query_cache
为true
. 当您使用 HQL 时,Hibernate 将“做正确的事”。
[编辑]
我怎样才能prime缓存?
您可以尝试加载对象,以便它们在 Hibernate 需要它们进行某些查询时位于缓存中。
但是缓存是一个非常复杂的话题。有许多因素允许和阻止使用缓存。如果您只有简单的情况,缓存将“正常工作”,您无需执行任何操作。如果你有复杂的 HQL,任何事情都可能发生。我已经看到了相同查询可能需要 100 毫秒或 10 秒的示例,具体取决于where
子句中的值。我见过缓存使整个事情变慢的代码。我见过我们从 Hibernate 会话请求底层连接的代码,并且我们自己做了所有事情,因为 Hibernate 根本不符合要求。
通常的方法是使代码尽可能简单,然后在生产环境中运行一段时间。随着时间的推移,用户会开始抱怨速度太慢的地方。然后,您可以优化这几个地方。这样,您就不会在用户不关心的代码上浪费时间。