2017-09-13 95 views
1

我正在使用@NamedQuery從我的DataBase中獲取一些結果。經過一段時間的操作後,我瞭解到@NamedQuery被請求後,應用程序部署&將其存儲在緩存中以獲得更多性能。@NamedQuery可緩存結果替代

所以,我正在尋找一種方式(查詢類型),當請求發出時總是從數據庫獲取信息,所以我可以始終獲取更新數據? 如果有辦法做這樣的事情,它的表現如何?

+0

命名查詢被編譯一次(到SQL)。它應該始終執行,除非您已打開某些JPA提供程序特定的查詢結果緩存。但是你沒有定義你啓用了什麼 – DN1

+0

@ DN1哪裏可以找到這樣的配置?因爲我沒有做任何配置! –

+1

你定義了一個EMF,所以你做了「一些」配置。你有一個LOG,所以你可以看到什麼SQL被調用。 – DN1

回答

1

正如評論中所述,您對NamedQuery存在誤解。不是結果存儲在緩存中,而是SQL查詢。

不過有時EntityManager的緩存了一些東西,我想你需要一個解決方案....

如果您正在使用的查詢對象(例如EntityManager.createNamedQuery(「nameOfYourQuery」))和的EclipseLink工作,那麼你可以做到以下幾點:

Query query = EntityManager.createNamedQuery("nameOfYourQuery"); 
query.setHint(QueryHints.REFRESH, HintValues.TRUE); 
query.getResultList(); 

您還可以設置查詢提示,直接在NamedQuery這樣的:

@NamedQuery(name = "something", query = "SELECT n FROM something", 
[email protected](name=QueryHints.REFRESH, value=HintValues.TRUE)) 

另一種方式的無線日查詢提示會是這樣:

query.setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache); 

有關可能的查詢提示列表,看看the EclipseLink docs

如果您想徹底取消數據庫結果緩存,您還可以嘗試在persistence.xml如下:

<property name="eclipselink.query-results-cache" value="false"/> 
+1

謝謝,這是我尋找的,我與一位有經驗的同事討論了這個問題,他給了我相同的解釋,但沒有技術細節,再次感謝! –