Десериализация Hazelcast: Значения атрибутов родительского класса после десериализации являются нулевыми - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть два класса Parent Class и Child, как показано ниже:

 @MappedSuperclass
 public  class ParentEntity implements  DataSerializable {
        private String createdBy;
        private Date createdAt;

        public String getCreatedBy() {
            return createdBy;
        }
        public void setCreatedBy(String createdBy) {
            this.createdBy = createdBy;
        }
        public Long getCreatedAt() {
            return createdAt.getTime();
        }
        public void setCreatedAt(Date createdAt) {
            this.createdAt = createdAt;
        }
       @Override
       public void writeData(ObjectDataOutput out) throws IOException {
        out.writeUTF(createdBy);
        out.writeLong(this.getCreatedAt());
       }
      @Override
      public void readData(ObjectDataInput in) throws IOException {
        createdBy = in.readUTF();
        createdAt = new Date(in.readLong());
      }
 }

Дочерний класс, как показано ниже: -

public class Child_Entity  extends ParentEntity implements DataSerializable {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
    this.id = id;
   }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public void writeData(ObjectDataOutput out) throws IOException {
        out.writeUTF(id);
        out.writeUTF(name);
    }
    @Override
    public void readData(ObjectDataInput in) throws IOException {
        id = in.readUTF();
        name = in.readUTF();
      }
  }

Я получаю эти значения из базы данных и помещаю в Hazelcastкэш iMap.При получении значений из кэша я получаю правильные значения идентификатора и имени, но значения createAt и madeBy (атрибуты родительского класса) равны нулю.Как можно сериализовать родительский класс также с дочерним классом.

1 Ответ

0 голосов
/ 15 ноября 2018

Вам необходимо вызывать методы сериализации суперкласса в методах дочернего класса. Например;

public class Child_Entity  extends ParentEntity implements DataSerializable {
private String id;
private String name;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id; }
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
    super.writeData(out);
    out.writeUTF(id);
    out.writeUTF(name);
}
@Override
public void readData(ObjectDataInput in) throws IOException {
    super.readData(in);
    id = in.readUTF();
    name = in.readUTF();
  }}
...