0

我正在尝试确定我的所有 Spring Data Gemfire 查询是否都在使用 Gemfire 服务器上定义的索引。

使用 OQL,我知道我可以添加“ <trace>”,并且在 gemfire 日志中它会显示是否正在使用索引:

@Query("<trace> SELECT c FROM /customer c, c.emailAddresses email WHERE email.emailAddress = $1")
CustomerEntity findByEmailAddress(String emailAddress);

但是像这样我们没有定义 OQL 的方法呢?(假设用户名不是客户区域的键):

CustomerEntity findByUsername(String username);
4

1 回答 1

0

好问题。不幸的是,基于方法名称和名称中使用的约定生成 GemFire OQL 查询的 Repository 方法不支持 TRACE 或其他 OQL 语句,如IMPORT

您可能知道,Spring Data GemFire 的 Repository 支持建立在Spring Data Commons Repository 基础设施之上,该基础设施为最广泛的数据存储支持(关系、键值、文档等)保持最低公分母。

不过,您可以通过设置 GemFire System 属性为所有 GemFire OQL 查询启用调试...

-Dgemfire.Query.VERBOSE=true

启动您的应用程序时。有关详细信息,请参阅GemFire 的查询调试用户指南

不幸的是,如果您只想跟踪您的 OQL 查询之一,这会更加冗长,但会完成您想要的。

在基于 Repository 方法的单个 OQL 查询中进行 TRACE 的唯一其他方法是使用上面所示的 @Query 注释。

@Query("<trace> SELECT c FROM /customer c, c.emailAddresses email WHERE email.emailAddress = $1")
CustomerEntity findByEmailAddress(String emailAddress);

你的问题确实给了我一些想法。我正在考虑通过这样的注释提供 IMPORT 和 TRACE 支持......

@Trace
@Import("example.app.domain.CustomerEntity")
CustomerEntity findByUsername(String username);

这将非常优雅和有用。

请参阅我提交的新 JIRA 票证 ( SGF-392 ) 以添加对此功能的支持。

谢谢!

于 2015-04-03T19:10:30.877 回答