代码之家  ›  专栏  ›  技术社区  ›  emanuel07

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

  •  0
  • emanuel07  · 技术社区  · 7 年前

    如何使用索引 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(); 
    

    它带来了以下内容 缓存异常 Failed to run map query remotely

    当我改变时 对象 Integer 一切正常。

    但我不明白为什么 ORDER BY 工作,但 WHERE doe不带 对象 领域

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

    1 回复  |  直到 5 年前
        1
  •  3
  •   Denis Mekhanikov    7 年前

    好的,这里要学习的是,不应该将Object用作字段类型:)

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

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

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

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