Я пытаюсь создать класс JPA, реализующий простой интерфейс:
public interface Task<T> {
public void setData(T data);
public T getData();
public void run();
}
По некоторым причинам мне нужно, чтобы T data
был сохранен в сериализованной форме, поэтому моему классу JPA нужны оба метода получения / установки JPAи реализация интерфейса.Очевидно, что их нужно как-то синхронизировать.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AbstractTask<T extends Serializable> implements Task<T> {
private T data;
private byte[] serializedData; // do I need both vars? which one to choose?
@Override
@Transient
public T getData() {
return data; // or deserialized 'serializedData'?
}
@Override
public void setData(T data) {
this.data = data; // or serialize into 'serializedData'?
}
@Column
@Lob
public byte[] getSerializedData() {
return serializedData; // or serialized 'data'?
}
public void setSerializedData(byte[] bytes) {
this.serializedData = bytes;
// deserialize 'bytes' into 'data'?
}
}
Каков правильный подход к синхронизации этих переменных класса или как перестроить одну из другой?Этот вопрос несколько шире, чем сериализация / десериализация, и относится к любой ситуации, когда какой-либо объект может быть уникальным образом перестроен из постоянных данных JPA и наоборот.