2014-12-08 74 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建議的方式更快或更慢。