Apache Ignite 查询未检索 CacheTypeMetadata 中配置的缓存字段
Apache Ignite query not retrieving for Cache fields configured in CacheTypeMetadata
我已经在 apache ignite 中配置了 Datagrid 缓存。查询字段使用 CacheTypeMetada
配置。
但是我无法使用 sql 从缓存中检索值。
如果我将配置的查询字段更改为 @QueryIndexType (index = true)
查询 returns 结果。
我的问题是,是否缺少任何配置来对使用 CacheTypeMetadata 配置的缓存进行 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());
}
你的例子对我来说效果很好。你能看看我的代码,看看和你的有什么不同吗(见下面的link)?
你用的是什么版本?
我已经在 apache ignite 中配置了 Datagrid 缓存。查询字段使用 CacheTypeMetada
配置。
但是我无法使用 sql 从缓存中检索值。
如果我将配置的查询字段更改为 @QueryIndexType (index = true)
查询 returns 结果。
我的问题是,是否缺少任何配置来对使用 CacheTypeMetadata 配置的缓存进行 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());
}
你的例子对我来说效果很好。你能看看我的代码,看看和你的有什么不同吗(见下面的link)?
你用的是什么版本?