2011-01-03 2 views
2

Я хочу отслеживать изменения, внесенные в каждый столбец в конкретной таблице. Я думал о сохранении изменений в другой таблице со следующими столбцами: id, field, and data где field (строковое значение) - это столбец в целевой таблице, который был изменен, и data - это новое значение этого поля.Отслеживание изменений полей db при использовании ORM

При возврате набора данных я думал об извлечении исходных данных из целевой таблицы и измененных значений из изменений отслеживания таблицы, а затем используя возможности отражения в Java, чтобы установить значения измененных полей в самое новое измененное значение.

На основании вышеизложенного у меня есть следующие вопросы:

  1. ли мой подход имеет смысл? Есть ли лучший способ достичь желаемых результатов?
  2. Я использую JPA 2 для обработки ORM, есть ли какие-либо функции ORM, которые могут быть полезны для достижения конечной цели?

Благодаря

ответ

3

Проверить Hibernate Envers и EclipseLink историческая сессия для аудита объекта .. JPA 2.0 спецификации не имеет ничего, связанного с проверкой объекта ..

+0

Если вы используете Hibernate, вам обязательно нужно проверить настройки. Его можно легко интегрировать с помощью механизма событий hibernate и не требует больших усилий для настройки. Envers достаточно мощный и может обрабатывать аудит полных графиков объектов. Кроме того, он упрощает запрос истории. – Thomas

+0

& @Thomas: Поскольку я использую спящий режим в качестве основной реализации, я смотрел в Envers, и он делает именно то, что я ищу. Спасибо за хедз-ап. – NKing253

1

Ваш подход прекрасно. Возможно, вам понадобится много полей «данных» для покрытия различных типов данных (например, даты, текста, длинного текста).

Что я делаю, чтобы решить эту проблему (но также легко обеспечить возможности отката), это использовать xstream и текстовый diff-движок. Я использую xstream для захвата xml-снимка pojo, затем применяю редактирование пользователя, а затем захватываю другое. Я различаю два моментальных снимка и сохраняю текст diff. Также с некоторыми усилиями я могу довольно печатать модификацию в стиле вики.

+0

Вот что я думаю. Какой механизм текстового разбора вы использовали? Доступно ли это на Java? Если xml-выход из xstream превышает 1 МБ, как насчет производительности? Спасибо. –

Смежные вопросы