Это проблема обработки исторических данных. Предположим, у вас есть класс 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, и вы получаете таблицу с допустимым временем начала и окончания и значением атрибута).
Настоящая проблема в том, что здесь у нас несколько атрибутов.
У меня есть решение, но оно не совсем ясное, и я хотел бы услышать ваши идеи.