我正试图使用GemfireTemplate查询方法向文档中提到的OQL查询添加Trace。但是OQL验证失败,QueryInvalidException";意外的记号:<";。有什么想法吗?
这不是SDG的GemfireTemplate
的错误,也不是SDG一般的问题。
在GemFire/Geode中有两种查询方式。
-
首先,是使用
QueryService
,它可以从缓存中获得。或者,您可以从ClientCache
,甚至从连接到运行OQL查询的Region
的Pool
获得QueryService
。当使用SDG的Repository抽象扩展时,这一切都会自动为您处理。 -
查询CCD_ 7的第二种方式是将查询";PREDICATE";到CCD_ 8方法。
您认为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)
方法Only接受OQL查询PREDICATE,即id = 1
。
传递给GemfireTemplate.query(:String)
方法(并扩展为Region.query(:String)
API(的任何其他OQL查询保留字或查询语法通常会导致无效的OQL查询。
如果要传递<HINT 'IDIndex', ...> <TRACE> SELECT * FROM /SomeRegion WHERE id = 1 AND ...
,则应调用GemfireTemplate.find(:String)
,它使用接受完整OQL查询语法的GemFire/GeodeQueryService
。
或者,您可以使用Spring Data for Apache Geode(或VMware Tanzu GemFire(存储库扩展。
甚至还可以将HINTS、TRACES、LIMITS或其他查询工具添加到派生的Repository查询方法以及用@Query
注释的查询方法中。有关更多详细信息,请参阅文档。