2012-10-10 110 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