我正在使用@NamedQuery
从我的DataBase中获取一些结果。在操作它一段时间后,我理解在部署应用程序后请求gem spec <name>
&amp;将其存储在缓存中以获得更高的性能。
所以,我正在寻找一种方法(一种查询),在发出请求时始终从数据库中获取信息,这样我就能获得始终更新的数据? 如果有办法做这样的事情,它的表现是什么?
答案 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"/>