@NamedQuery 可缓存结果替代
@NamedQuery cachable result alternative
我正在使用 @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",
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"/>
我正在使用 @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",
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"/>