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