@NamedQuery可缓存的结果替代方案

时间:2017-09-13 14:29:46

标签: performance jpa java-ee-6 ejb-3.1 glassfish-4

我正在使用@NamedQuery从我的DataBase中获取一些结果。在操作它一段时间后,我理解在部署应用程序后请求gem spec <name>&amp;将其存储在缓存中以获得更高的性能。

所以,我正在寻找一种方法(一种查询),在发出请求时始终从数据库中获取信息,这样我就能获得始终更新的数据? 如果有办法做这样的事情,它的表现是什么?

1 个答案:

答案 0 :(得分:1)

正如评论中已经提到的那样,你对NamedQuery有误解。结果不是存储在缓存中,而是查询SQL是。

然而,有时EntityManager会缓存一些东西,我想你需要一个解决方案....

如果您正在使用Query对象(例如EntityManager.createNamedQuery(&#34; nameOfYourQuery&#34;))和EclipseLink,那么您可以执行以下操作:

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

您还可以直接在NamedQuery中设置查询提示,如下所示:

@NamedQuery(name = "something", query = "SELECT n FROM something",
 hints=@QueryHint(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"/>