使用 GemfireTemplate.query 方法的 HINT 和 TRACE

Using HINT and TRACE with GemfireTemplate.query method

我正在尝试向 docs, using GemfireTemplate query method 中提到的 OQL 查询添加跟踪。但是 OQL 验证失败并出现 QueryInvalidException“unexpected tokern: <”。有什么想法吗?

这不是 SDG GemfireTemplate 的错误,也不是 SDG 的一般问题。

GemFire/Geode中有2种查询方式。

  1. 首先是使用QueryService, which can be obtained from the cache. Alternatively, you can obtai the QueryService from the ClientCache or even from the Pool attached to the Region on which you are running the OQL query. This is all handled for you automatically when using SDG's Repository abstraction extension.

  2. 查询 Region 的第二种方法是将查询“PREDICATE”传递给 Region.query(:String) 方法。

您认为 GemfireTemplate.query(:String) 方法使用的是哪种 GemFire/Geode API?

GemfireTemplate.query(:String) uses Region.query(:String) API.

GemfireTemplate.find(:String)方法usesQueryService.

只有 QueryService 可以接受完全有效的 OQL 查询,例如<TRACE> SELECT * FROM /SomeRegion WHERE id = 1,其中 Region.query(:String) 方法仅接受 OQL 查询谓词,即 id = 1.

任何其他 OQL Query reserved words or query syntax 通常传递给 GemfireTemplate.query(:String) 方法(并通过扩展 Region.query(:String) API)导致无效的 OQL 查询。

如果要传递 <HINT 'IDIndex', ...> <TRACE> SELECT * FROM /SomeRegion WHERE id = 1 AND ...,则应调用 GemfireTemplate.find(:String),它使用接受完整 OQL 查询语法的 GemFire/Geode QueryService

或者,您可以使用 Spring Data for Apache Geode(或 VMware Tanzu GemFire)Repository 扩展。

甚至还可以将 HINTS、TRACES、LIMITS 或其他查询工具添加到派生的 Repository 查询方法以及用 @Query 注释的查询方法。有关详细信息,请参阅 documentation