2014-12-08 62 views
1

在我的Java代码的名单我有一个具有以下属性的对象为人的物体:Gridgain:查询拥有项目

class Person{ 
    int id; 
    List<Integer> values; 
} 

我写了下面的查询来获取的每个值之和平均一个人。

GridCacheQuery<Map.Entry<GridCacheAffinityKey<Integer>, Person>> qry=cache.queries().createSqlQuery(Person.class,"values.get(1) > ? and values.get(2) <= ?"); 
Iterable<Entry<GridCacheAffinityKey<Long>, Subscriber>> cols = qry.execute(1,10).get(); 

我知道这不是正确的查询方式,但我无法找到正确的方法来做到这一点。

,我发现了以下错误:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT ""partitioned"".PERSON._KEY,""partitioned"".PERSON._VAL FROM ""partitioned"".PERSON WHERE VALUES.GET([*]1) > ? AND VALUES.GET(2) <= ? "; 
SQL statement: SELECT "partitioned".Person._key, "partitioned".Person._val FROM "partitioned".Person WHERE values.get(1) > ? and values.get(2) <= ? [42000-175] 

回答

1

GridGain不支持嵌入到SQL查询代码段。如果您要访问列表的这些特定元素的查询,您可以创建这些元素像这样的存取方法(别名):

@GridCacheQuerySqlField 
public int first() { 
    return values.get(1); 
} 

@GridCacheQuerySqlField 
public int second() { 
    return values.get(2); 
} 

,并直接在查询中使用它们:first > ? and second <= ?

1

我想谓词也可以为你的purpopse服务,但不知道它是否比Alexey建议的方式更快或更慢。

相关问题