我正在尝试使用 GemfireTemplate查询方法将 Trace 添加到文档中提到的 OQL 查询。但是 OQL 验证失败并出现 QueryInvalidException“意外令牌:<”。有任何想法吗?
1 回答
这不是 SDG 的错误GemfireTemplate
,也不是 SDG 的一般问题。
在 GemFire/Geode 中有 2 种查询方式。
首先是使用
QueryService
,可以从缓存中获取。或者,您可以从运行 OQL 查询QueryService
的ClientCache
或什至从Pool
附件中获取。使用 SDG 的存储库抽象扩展Region
时,这一切都会自动为您处理。查询 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
。有关更多详细信息,请参阅文档。