Хранение исторических данных с помощью Java и Hibernate

Это проблема обработки исторических данных. Предположим, у вас есть класс MyClass, подобный следующему:

class MyClass {
    String field1;
    Integer field2;
    Long field3;

    getField1() {...}
    setField1(String ...) {...}

    ...
}

Теперь предположим, что мне нужно сделать MyClass способным сохранять и извлекать старые данные, как лучше всего это сделать?
Требования также должны сохранять классы через Hibernate. И иметь не более двух таблиц для каждой «сущности» : только одна таблица или одна таблица для класса «непрерывности» (та, которая представляет сущность, которая развивается с течением времени) и другая таблица для исторических данных. (как предлагается здесь )
Обратите внимание, что я должен иметь возможность назначать произвольное допустимое время значениям полей.

Класс должен иметь такой интерфейс:

class MyClass {
    // how to store the fields????

    getField1At(Instant i) {...}
    setField1At(Instant i, String ...) {...}

    ...
}

В настоящее время я использую библиотеку JTemporal , и у него есть класс TemporalAttribute , который похож на карту: вы можете делать такие вещи, как T myAttr.get (Instant i) , чтобы получить версию myAttr в Instant i . Я знаю, как сохранить TemporalAttribute в таблице с Hibernate (это просто: я сохраняю SortedMap, используемую TemporalAttribute, и вы получаете таблицу с допустимым временем начала и окончания и значением атрибута).
Настоящая проблема в том, что здесь у нас несколько атрибутов.
У меня есть решение, но оно не совсем ясное, и я хотел бы услышать ваши идеи.

5
задан cdarwin 30 November 2010 в 22:43
поделиться