gpt4 book ai didi

java - Apache Ignite 具有对象类型的索引字段

转载 作者:行者123 更新时间:2023-12-01 20:05:36 25 4
gpt4 key购买 nike

如何将索引与 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:无法远程运行 map 查询

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

但我不明白为什么 ORDER BY 可以工作,但 WHERE 却不能使用 Object 字段。

更多信息您可以查看:http://apache-ignite-users.70518.x6.nabble.com/Cache-queries-Failed-to-run-map-query-remotely-td18378.html

最佳答案

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

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

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

我并没有真正详细介绍整个过程,但我希望您能明白。

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

关于java - Apache Ignite 具有对象类型的索引字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47473844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com