Apache Ignite查询未检索CacheTypeMetadata

时间:2015-06-22 20:35:51

标签: java sql ignite

我在apache中配置了一个Datagrid Cache。查询字段使用CacheTypeMetada配置。 但我无法使用sql从Cache中检索值。

如果我更改配置为@QueryIndexType (index = true)的查询字段 查询返回结果。

我的问题是,是否有任何配置我缺少使用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());
}

1 个答案:

答案 0 :(得分:0)

你的例子适合我。你能看一下我的代码,看看你的代码是否有任何不同(见下面的链接)?

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

你在哪个版本?