2013-02-04 47 views
0

我已閱讀this post.我無法獲得本文中建議的整個對象。我得到MIN,MAX,Count值。所以一個新的職位。 以下是我想要的和我擁有的。用於標量查詢的休眠緩存

  1. 我的Spring應用程序不會對DB(MySQL)進行任何更改。它只是讀取數據。它不會意識到對數據庫中的現有數據所做的更改。
  2. 我的所有查詢都返回標量數據。不是整個對象。 (例如:Select employee.name,office.address,MIN(employee.rec) from ... where..

  3. 我希望我的查詢被緩存。因此,我在休眠配置中啓用了查詢緩存。並將cacheable="true"添加到了我的命名查詢中。

4.I啓用二級緩存。

5.爲持久化類添加下面的註釋。

@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 

6.我想每隔24小時刷新緩存。因此在ehcache.xml defaultCache中更新了timeToLiveSeconds

這是正確的方法嗎?如何知道查詢是否從查詢緩存中訪問二級緩存?

更新:我添加了統計信息,並且二級緩存沒有命中/未命中。

+0

沒有意義在使實體緩存,因爲你永遠不會從你的查詢返回它們。要知道緩存是否被命中,請打開SQL日誌記錄(通過將propert hibernate.show_sql設置爲true),並查看是否生成查詢。 –

+0

謝謝@JBNizet。我認爲我所有的其他配置都是正確的:) – dj8485

回答

1

打開SQL日誌記錄和統計信息生成。如果您看到SQL查詢日誌記錄,那意味着緩存不起作用。

<property name="hibernate.show_sql" value="true"/> 
<property name="hibernate.generate_statistics" value="true"/> 

爲了看到第二級緩存的命中次數:

session.getSessionFactory().getStatistics().getSecondLevelCacheHitCount() 
+0

感謝您的回覆。關於標量查詢,這是否對二級緩存有任何影響? – dj8485

+0

你可能想看看這個:http://stackoverflow.com/questions/8480268/how-query-cache-works-for-scalar-results – ogzd

+0

也是這個,https://forum.hibernate.org /viewtopic.php?f=1&t=941773 – ogzd