我正在使用@NamedQuery
從我的DataBase中獲取一些結果。經過一段時間的操作後,我瞭解到@NamedQuery
被請求後,應用程序部署&將其存儲在緩存中以獲得更多性能。@NamedQuery可緩存結果替代
所以,我正在尋找一種方式(查詢類型),當請求發出時總是從數據庫獲取信息,所以我可以始終獲取更新數據? 如果有辦法做這樣的事情,它的表現如何?
我正在使用@NamedQuery
從我的DataBase中獲取一些結果。經過一段時間的操作後,我瞭解到@NamedQuery
被請求後,應用程序部署&將其存儲在緩存中以獲得更多性能。@NamedQuery可緩存結果替代
所以,我正在尋找一種方式(查詢類型),當請求發出時總是從數據庫獲取信息,所以我可以始終獲取更新數據? 如果有辦法做這樣的事情,它的表現如何?
正如評論中所述,您對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"/>
謝謝,這是我尋找的,我與一位有經驗的同事討論了這個問題,他給了我相同的解釋,但沒有技術細節,再次感謝! –
命名查詢被編譯一次(到SQL)。它應該始終執行,除非您已打開某些JPA提供程序特定的查詢結果緩存。但是你沒有定義你啓用了什麼 – DN1
@ DN1哪裏可以找到這樣的配置?因爲我沒有做任何配置! –
你定義了一個EMF,所以你做了「一些」配置。你有一個LOG,所以你可以看到什麼SQL被調用。 – DN1