0

Apache ignite で Datagrid Cache を構成しました。クエリ フィールドは を使用して設定されます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 に答える