当前位置: 首页 > 知识库问答 >
问题:

是否可以在Hazelcast中通过键而不是值进行查询(使用谓词)?

洪建茗
2023-03-14

在Hazelcast中,是否可以基于键的属性而不是值来查询IMap?所有Hazelcast示例都显示了按值查询。E、 例如,对于具有字符串键的员工地图:

IMap<String, Employee> employees;

然后,典型的搜索谓词根据员工属性(姓名、薪资等)进行搜索。但我的案例使用了更复杂的密钥,例如:

IMap<DataAttributes, DataValue> myData;

因此,如果数据属性具有以下字段:

 class DataAttributes {
     String theDescription;
     Date   theStartTime;
     public String getDescription() { return theDescription; }
     // etc....
 }

我想编写一个可以通过键进行查询的谓词,以返回适当的DataValue对象。这不起作用:

Predicate pred = Predicates.equal("description", "myDescription");
myData.keySet(pred);  // Throws IllegalArgumentException: "There is no suitable accessor for..."

我可以按照这个答案中的建议推出自己的解决方案,但如果可以的话,我宁愿使用现成的解决方案。

不管我是使用Criteria API还是分布式SQL查询API。任何有效的查询都会很好。对嵌套属性(即:DataAttributestheStartTime.getYear())有效的解决方案的额外积分。

共有1个答案

司空默
2023-03-14

可以使用PredicateBuilder(com.hazelcast.query.PredicateBuilder)。PredicateBuilder范例允许您基于键进行查询,如下所示:

EntryObject eo = new PredicateBuilder().getEntryObject();
Predicate fredWithStartTimeThisYear = eo.key().get("Description").equal("Fred")
  .and(eo.key().get("theStartTime.Year").equal(2015));

注意,您可以通过访问器方法(“getter”)或字段名引用类成员,如上面的示例代码所示。我在Hazelcast上的“掌握Hazelcast”在线图书中找到了这些信息。org(但你必须填写登记表才能访问它)。

 类似资料:
  • 嗨,Dynamodb社区, 因此,所讨论的表是MLA_USER_AUTH。正如您所看到的,它有As分区键和As排序键。我希望能够使用用户id和电子邮件查询数据库。 有时我需要查找与电子邮件关联的用户,有时还需要查找用户ID。电子邮件和用户ID属性对于每个访问者都是唯一的。有什么办法可以做到吗? 这是我目前的查询。这显然行不通。当它抛出错误时:ValidationExc0019:查询条件错过了关键架

  • 问题内容: 我正在尝试通过联接表的属性过滤查询 我有2个表“城市和类别”,我正在通过第三个表CityCategory进行关联。想法是在时获取与城市关联的类别。是一个特定的整数。 这就是我指定关联的方式: 这是我当前使用的查询,未成功使用: 不幸的是,我不确定如何告诉续集使用CityCategory的year属性,而不是在Category模型中搜索名为“ year”的属性… 这是可能的还是我必须手动

  • 问题内容: 假设表格具有名称,ID,年龄,性别,学历等。ID是关键,并且该表也按名称,年龄和性别进行索引。我需要所有25岁以上的男学生,按其姓名排序。 这在mySQL中很简单: IndexDB允许创建索引并根据该索引对查询进行排序。但是它不允许多个查询,例如年龄和性别。我发现了一个名为queryIndexedDB的小型库,该库允许复合查询,但不提供排序结果。 那么,在使用IndexedDB时,有没

  • 问题内容: 如果是这样,那么在Objective-C中使用键值观察时是否没有其他键差异? 问题答案: (编辑以添加新信息):考虑使用Combine框架是否可以帮助您完成所需的工作,而不是使用KVO 是的,没有。KVO一直以来都在处理NSObject子类。它不适用于不继承NSObject的类。斯威夫特(目前至少)没有自己的原生观察系统。 (有关如何将其他属性公开为ObjC的信息,请参见注释,以便KV

  • 指定:这就是表的样子。 希望得到的结果是由Hibernate为我构建的SQL查询:

  • 我是Hazelcast的新手-评估和原型设计,看看它是否适合我们的分布式内存缓存需求。其中一个要求是能够使用通配符在给定地图中搜索关键字。通过查看IMap文档,可以使用keySet(谓词谓词)。但我不知道如何使用谓词,在给定通配符字符串的情况下,返回一个包含所有匹配键的键集。举个例子会很有帮助。 我的代码片段。这是客户端。 谢谢