在我的Java代码中,我有一个具有以下属性的对象:
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]
答案 0 :(得分:1)
GridGain不支持嵌入SQL查询的代码段。如果要在查询中访问列表中的这些特定元素,可以为这些元素创建访问器方法(别名),如下所示:
@GridCacheQuerySqlField
public int first() {
return values.get(1);
}
@GridCacheQuerySqlField
public int second() {
return values.get(2);
}
并直接在您的查询中使用它们:first > ? and second <= ?
答案 1 :(得分:1)
我认为谓词也可以为你的purpopse服务,但不确定它是否比你建议的方式更快或更慢 阿列克谢。