0

我已经在 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());
}
4

1 回答 1

0

你的例子对我来说很好。你能看看我的代码,看看和你的代码有什么不同吗(见下面的链接)?

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

你在哪个版本?

于 2015-06-23T18:41:06.437 回答