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

Hazelcast谓词SQL到映射

司徒良哲
2023-03-14

我正在尝试构建一个方法,删除具有非空属性的条目,但我一直在谓词中失败,我不知道如何正确实现谓词,因为hazelcast没有将“Not NULL”或“IS NULL”作为where子句任何想法如何在映射中找到我需要搜索以删除它们的值?

方法

public int removeEntry(String CacheName, String claveReq, int id_interno_pe, String cod_nrbe_en, int num_sec_ac) {
    
    int counter = 0;
    IMap<String, ResponseSerializablePlus> map = clientInstance.getMap(CacheName);
    
    
//      Predicate claveReqQuery = Predicates.equal("claveReq", claveReq);
//      Predicate idInternoQuery = Predicates.equal("id_interno_pe", id_interno_pe);
//      Predicate codNrbeQuery = Predicates.equal("cod_nrbe_en", cod_nrbe_en);
//      Predicate numSecQuery = Predicates.equal("num_sec_ac", num_sec_ac);
//      Predicate query = Predicates.and(idInternoQuery,codNrbeQuery,numSecQuery);
    
    Predicate query = Predicates.sql("id_interno_pe IS NOT NULL"); 
    
    
    if (!map.isEmpty()) {
        for (ResponseSerializablePlus entry : map.values(query)) {
            System.out.println("Entry "+entry.toString()+" Found");
            map.delete(entry);
            
            counter++;
            
        }
        System.out.println("Map Size ->"+map.size());
        System.out.println("Deleted entries -> "+counter);
        return counter;
    }else {
        System.out.println("No matches");
        return 0;
    }
    }

主类响应SerializablePlus

public class ResponseSerializablePlus implements IdentifiedDataSerializable{

private int id_interno_pe;
private String cod_nrbe_en;
private int num_sec_ac;
private int statusCode;
private HashMap<String,List<String>> headers;
private byte[] content;
public ResponseSerializablePlus(int id_interno_pe, String cod_nrbe_en, int num_sec_ac, int statusCode,
        HashMap<String, List<String>> headers, byte[] content) {
    this.id_interno_pe = id_interno_pe;
    this.cod_nrbe_en = cod_nrbe_en;
    this.num_sec_ac = num_sec_ac;
    this.statusCode = statusCode;
    this.headers = headers;
    this.content = content;
}
public ResponseSerializablePlus() {
}
public void writeData(ObjectDataOutput out) throws IOException {
    out.writeInt(id_interno_pe);
    out.writeString(cod_nrbe_en);
    out.writeInt(num_sec_ac);
    out.writeInt(statusCode);
    out.writeObject(headers);
    out.writeByteArray(content);
    
}
public void readData(ObjectDataInput in) throws IOException {
    this.id_interno_pe = in.readInt();
    this.cod_nrbe_en = in.readString();
    this.num_sec_ac = in.readInt();
    this.statusCode = in.readInt();
    this.headers = in.readObject();
    this.content = in.readByteArray();
    
}
public int getFactoryId() {
    return ResponseSerializablePlusFactory.FACTORY_ID;
}
public int getClassId() {
    return ResponseSerializablePlusFactory.RESPONSE_SERIALIZABLE_PLUS_CLASS;
}
@Override
public String toString() {
    return "ResponseSerializablePlus [id_interno_pe=" + id_interno_pe + ", cod_nrbe_en=" + cod_nrbe_en
            + ", num_sec_ac=" + num_sec_ac + ", statusCode=" + statusCode + ", headers=" + headers + ", content="
            + Arrays.toString(content) + "]";
}
}

共有1个答案

荆学民
2023-03-14

它确实不受支持,它是文档,以及替代选项。请看这里:https://github.com/hazelcast/hazelcast/blob/3cb8ce1fc3bb848aced6c87a30bf7b31aec16cf7/hazelcast/src/main/java/com/hazelcast/query/Predicates.java#L492-L497

 类似资料:
  • TestValue类是简单的pojo 这只是本地env,所有的东西都在我的机器上运行,单个Hazelcast实例。我的代码与官方文档中的示例相匹配。 Hazelcast版本:4.2.1

  • 我有一个Hazelcast地图的HashMap作为我下面所示的值。 我想使用谓词/SQLPredicate执行查询。我该怎么做? 请帮帮我。

  • 如何将侦听器设置为一个映射,该映射的键有一个复杂的对象,并且我只想侦听具有特定键参数值的条目发生的更改。 例如,我有一个类似于此的代码: 但当一个包含“EN”语言的键的条目被更新时,我的回调函数不会被调用。所以我假设我的谓词是错误的。

  • 谁能告诉我如何用Hazelcast谓词“in”子句吗。我想使用以下内容, 我想将值作为值的ArrayList传递。但是它抛出错误,因为它期望实现可比的对象。对此有任何解决方法吗?

  • 在hazelcast IMap中查找谓词结果大小的最佳方法是什么? MapProxyImpl中不支持直接大小。java和size()将根据返回的集合进行计算,在这种情况下,这是不需要的。 你有什么建议吗? 谢谢

  • 我正在使用一个应用程序,我们SQL服务器作为数据库。需要在SQL服务器上添加HazelCast缓存层。 这是一个遗留系统,其工作方式类似于SQL服务,其中针对SQLServer DB执行的SQL查询存储在配置表中。 例如,有一个通过查询返回数据的UI: 这是动态获取、检索并针对数据库执行的。有许多这样的视图是通过动态查询呈现的。在HazelCast中,这些SQL语法中的一些不仅适用。 是否有任何数