JPA: постоянная синхронизация данных, нужен совет - PullRequest
3 голосов
/ 19 мая 2011

Я пытаюсь создать класс 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 и наоборот.

1 Ответ

1 голос
/ 19 мая 2011

Обратные вызовы жизненного цикла могут помочь вам здесь. PrePersist и PostLoad в частности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...