Apache Ignite具有Object类型的索引字段

时间:2017-11-24 12:59:01

标签: apache caching ignite

如何使用Object类型的索引?

我的模型有一个索引字段

 public class Model implements Serializable { 
      ...... 
      ..... 
    @QuerySqlField(index = true) 
    private Object sortField; 
   } 

以下命令正常工作 -

cache.query(new SqlQuery<>(Model.class, "ORDER BY sortField")).getAll(); 

但是当我想做一些过滤时,例如:

cache.query(new SqlQuery<>(Model.class, "sortField= ?").setArgs(10)).getAll(); 

它带来以下 CacheException Failed to run map query remotely

当我将Object更改为Integer时,一切正常。

但我不明白为什么ORDER BY有效但WHERE不适用于Object字段。

有关详细信息,请参阅:http://apache-ignite-users.70518.x6.nabble.com/Cache-queries-Failed-to-run-map-query-remotely-td18378.html

1 个答案:

答案 0 :(得分:3)

嗯,这里要学到的教训是你不应该使用Object作为字段类型:)

我浏览了代码,所以当你这样做时,值被视为一些“hexadimal strings”。所以,我想,当你做“按顺序”时,你实际上是对存储值的二进制表示进行排序。显然,它对所有类型都无法正常工作,但是H2(Ignite中的底层SQL引擎)由于某种原因允许它。

然后,当您尝试使用“where”子句进行过滤时,您提供的参数也被视为“hexadimal”字符串,并且失败,因为“10”不是正确的hexadiamal表示形式任何对象。

我没有真正了解整个程序的细节,但我希望,你明白了。

因此,如果您要在某个字段中存储整数,只需将其声明为Integerint