@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"/>