0

我正在尝试使用 GemfireTemplate查询方法将 Trace 添加到文档中提到的 OQL 查询。但是 OQL 验证失败并出现 QueryInvalidException“意外令牌:<”。有任何想法吗?

4

1 回答 1

1

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

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

  1. 首先是使用QueryService,可以从缓存中获取。或者,您可以从运行 OQL 查询QueryService ClientCache或什至从Pool附件中获取。使用 SDG 的存储库抽象扩展Region时,这一切都会自动为您处理。

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

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

GemfireTemplate.query(:String) 使用Region.query(:String)API 。

GemfireTemplate.find(:String)方法使用QueryService. _

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

传递给方法(以及通过扩展API)的任何其他OQL 查询保留字查询语法通常会导致无效的 OQL 查询。GemfireTemplate.query(:String)Region.query(:String)

如果您想通过<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)存储库扩展。

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

于 2020-09-08T17:37:36.983 回答