当密钥已经存在时,hazelcast imap put方法

时间:2015-01-08 05:28:50

标签: java hazelcast

我使用hazelcast IMap保存我的对象。我用get方法得到了我需要的对象。但是,当我尝试使用put方法更新缓存中的对象属性时,它似乎不起作用。这是逻辑......

public class EmployeeEntity {
  private boolean paid;

  // public setters and getters
}

public class Employee extends EmployeeEntity {
  private String id;
  private String name;
  // ... and many more

  // public setters and getters
}

使用put方法()将对象加载到IMap employeeMap - [Key is employee.id,Value is employee object]

for (Employee employee : employeeList) {
  Employee emp = employeeMap.get(employee.id)
  if (!emp.isPaid()) {
    emp.pay() // set the paid attribute to true
    employeeMap.put(employee.id, emp)
  }
}

employeeMap具有ID

"123","456","789".

循环中的员工列表具有ID

"123","123","123","789","456","789","456".

列表中重复的员工ID每次都是支付而不是第一次支付。
由于某种原因,put()不替换更新的emp对象。
每次, get方法返回pay属性设置为false的对象。

我在这里缺少什么?

- 更新:当我更改employee.name属性时,它工作正常。似乎与超类或布尔类型有关。

1 个答案:

答案 0 :(得分:2)

我的超类EmployeeEntity没有实现Serializable。所以,在放入缓存时,hazelcast并没有将其序列化。它实现了Serializable。