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());
}