Java 对象类型为的Apache Ignite索引字段

Java 对象类型为的Apache Ignite索引字段,java,caching,ignite,Java,Caching,Ignite,如何将索引与对象类型一起使用 我的模型有一个索引字段 public class Model implements Serializable { ...... ..... @QuerySqlField(index = true) private Object sortField; } 以下命令正常工作- cache.query(new SqlQuery<>(Model.class, "ORDER BY sortField")

如何将索引与
对象
类型一起使用

我的模型有一个索引字段

 public class Model implements Serializable { 
      ...... 
      ..... 
    @QuerySqlField(index = true) 
    private Object sortField; 
   } 
以下命令正常工作-

cache.query(new SqlQuery<>(Model.class, "ORDER BY sortField")).getAll(); 
cache.query(新的SqlQuery(Model.class,“orderbysortfield”)).getAll();
但是当我想做一些过滤时,例如:

cache.query(new SqlQuery<>(Model.class, "sortField= ?").setArgs(10)).getAll(); 
cache.query(新的SqlQuery(Model.class,“sortField=?”).setArgs(10)).getAll();
它带来了以下缓存异常
远程运行地图查询失败

当我将
对象
更改为
整数
时,一切都正常工作

但是我不明白为什么
orderby
可以工作,但是
WHERE
没有
对象
字段


有关更多信息,请参见:

好的,这里要学习的内容是不应将对象用作字段类型:)

我查看了代码,所以当您这样做时,值被视为一些“十六进制字符串”。所以,我猜,当你做“排序依据”时,你实际上是在对存储值的二进制表示进行排序。显然,它不会对所有类型都正常工作,但H2(Ignite中的底层SQL引擎)出于某种原因允许它

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

我并没有详细介绍整个过程,但我希望你能理解


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

好吧,这里要学习的教训是不应将对象用作字段类型:)

我查看了代码,所以当您这样做时,值被视为一些“十六进制字符串”。所以,我猜,当你做“排序依据”时,你实际上是在对存储值的二进制表示进行排序。显然,它不会对所有类型都正常工作,但H2(Ignite中的底层SQL引擎)出于某种原因允许它

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

我并没有详细介绍整个过程,但我希望你能理解

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