2012-10-10 111 views
2

我在我的应用程序中使用ehcache与休眠。休眠和ehcache

我能够使用的Ehcache缓存,但我想实现这样的事情:

  1. 我想缓存被频繁只有先用我的应用程序数据库表。

  2. 缓存表后,如何在我的hql查询中使用它。 就像在我的hql查询中,我为各个数据库表使用Pojo类名。在这种情况下,我该如何使用我的hql查询。

请提供一些文件或支持以上。

回答

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根本不适合账单。

通常的做法是尽可能简化代码并在生产中运行结果一段时间。最终,用户会开始抱怨它太慢的地方。然后,你可以优化这些地方。这样,您不会浪费时间在用户不关心的代码上。

+0

thanku Aaron Digulla ....实际上所有这些我已经set.I能够缓存我的查询。我的问题是在查询之前假设我将在我的应用程序中使用50个表。我可以从我的服务器上的数据库(服务器端缓存)中将所有这些表放入缓存中,并使用查询的缓存版本或任何其他内容。我怎么能做到这一点? – Srishti123

+0

或者我可以将它指向为:我想缓存我将在部署时在应用程序中使用的所有数据库表。如何实现此目的。 ??在这种情况下ehcache会帮助我吗? – Srishti123