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)?

https://github.com/vkulichenko/ignite-tests/blob/master/src/main/java/org/vk/ignite/query/metadata1/Main.java

你用的是什么版本?