当hashCode被覆盖时,Ignite如何执行cache.get()操作?



见下图。

图片.png

我已经使用等号将密钥放入缓存中 方法如下:

@Override
public boolean equals(Object obj) {
HierarchyMasterKey hierarchyMasterKey = (HierarchyMasterKey) obj;   
return  equalTo(this.hmCustNo, hierarchyMasterKey.hmCustNo) &&
equalTo(this.hmFromDate, hierarchyMasterKey.hmFromDate) &&
equalTo(this.hmParentCustNo, hierarchyMasterKey.hmParentCustNo) &&
equalTo(this.hmActNo, hierarchyMasterKey.hmActNo);
} 

(equalTo 方法基本上是空安全等于检查。

哈希代码的计算方法如下:

@Override 
public int hashCode() { 
return Objects.hash(hmCustNo,hmActNo); 
} 

当我试图从中得到它时, equals 方法不会被执行。为什么会这样?点燃如何得到 没有执行等于的键?

[我有一个缓存,其中包含一个层次结构主键和一个层次结构主列表 作为值并使用外部化来覆盖哈希码和等于]

默认情况下,Ignite 将以二进制序列化形式逐个字段(包括字段排序(比较键。

hashCode仅在您的类实现Externalizable时使用。这会影响性能。

您还可以实现Binarylizable并实现相应的方法来影响对象的存储和比较方式。

在这里发现了问题。这实际上是一个有趣的观察。

我的缓存在堆上被禁用。Ignite 将执行 BPlusTree 搜索堆外项,其中不需要执行 equals 方法来查找结果。

如果启用,它将像哈希图获取操作一样工作。

最新更新