如何使用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
字段。
答案 0 :(得分:3)
嗯,这里要学到的教训是你不应该使用Object作为字段类型:)
我浏览了代码,所以当你这样做时,值被视为一些“hexadimal strings”。所以,我想,当你做“按顺序”时,你实际上是对存储值的二进制表示进行排序。显然,它对所有类型都无法正常工作,但是H2(Ignite中的底层SQL引擎)由于某种原因允许它。
然后,当您尝试使用“where”子句进行过滤时,您提供的参数也被视为“hexadimal”字符串,并且失败,因为“10”不是正确的hexadiamal表示形式任何对象。
我没有真正了解整个程序的细节,但我希望,你明白了。
因此,如果您要在某个字段中存储整数,只需将其声明为Integer
或int
。