我已经在 apache ignite 中配置了一个 Datagrid 缓存。查询字段使用CacheTypeMetada
. 但我无法使用 sql 从缓存中检索值。
如果我将配置的查询字段更改为@QueryIndexType (index = true)
查询返回结果。
我的问题是,我是否缺少任何配置来对使用 CacheTypeMetadata 配置的 Cache 进行 sql 查询查找?
谢谢你。
提供我的代码片段。
CacheConfiguration<TestKey, Test> testCacheCfg = new CacheConfiguration<>(TEST_CACHE);
查询文件是使用 CacheTypeMetadata 配置的。
private static Collection<CacheTypeMetadata> testCacheMetadata(){
Collection<CacheTypeMetadata> types = new ArrayList<>();
CacheTypeMetadata type = new CacheTypeMetadata();
type.setKeyType(TestKey.class.getName());
type.setValueType(Test.class.getName());
Map<String, Class<?>> qryFlds = type.getQueryFields();
qryFlds.put("testId", int.class);
qryFlds.put("orgId", String.class);
qryFlds.put("md5", String.class);
Map<String, Class<?>> ascFlds = type.getAscendingFields();
ascFlds.put("testId", int.class);
ascFlds.put("orgId", String.class);
types.add(type);
return types;
}
查询称为:
private static void sqlQuery(Ignite ignite, TestKey testKey) {
IgniteCache<TestKey, Test> cache = Ignition.ignite().cache(TEST_CACHE);
// SQL clause
String sql = "where testId = ? and orgId = ?";
// Execute query
System.out.println("query result" +
cache.query(new SqlQuery<TestKey, Test>(Test.class, sql).
setArgs(testKey.getTestId(), testKey.getOrgId())).getAll());
}