Это проблема с обработкой исторических данных.
Предположим, у вас есть класс 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>
, похожий на карту: вы можете делать такие вещи, как T myAttr.get(Instant i)
, чтобы получить версию myAttr в Instant i , Я знаю, как сохранить TemporalAttribute в таблице с помощью Hibernate (это просто: я сохраняю SortedMap, используемый TemporalAttribute, и вы получаете таблицу с начальным и конечным допустимым временем и значением атрибута).
Реальная проблема в том, что здесь у нас есть несколько атрибутов.
У меня есть решение, но оно не ясное, и я хотел бы услышать ваши идеи.