сохраняя историю таблицы в Java - PullRequest
0 голосов
/ 29 марта 2011

Мне нужен пример программы на Java для хранения истории таблицы, если пользователь вставил, обновил и удалил эту таблицу.Кто-нибудь может помочь в этом?

Заранее спасибо.

Ответы [ 11 ]

3 голосов
/ 29 марта 2011

Если вы работаете с Hibernate , вы можете использовать Envers для решения этой проблемы.

1 голос
/ 31 марта 2011

У вас есть два варианта:

  1. Пусть база данных обрабатывает это автоматически с помощью триггеров. Я не знаю, какую базу данных вы используете, но все они поддерживают триггеры, которые вы можете использовать для этого.
  2. Напишите код в вашей программе, который делает нечто подобное при вставке, обновлении и удалении пользователя.

Лично я предпочитаю первый вариант. Это, вероятно, требует меньше обслуживания. Там может быть несколько мест, где вы обновляете пользователя, все эти места нуждаются в коде для обновления другой таблицы. Кроме того, в базе данных у вас есть больше возможностей для указания требуемых значений и ограничений целостности.

0 голосов
/ 02 марта 2015

Триггеры не предлагаются, когда я сохранял свои данные аудита в файле, иначе я не использовал базу данных ... я предлагаю создать таблицу "AUDIT" и написать код Java с помощью сервлетов и сохранить данные в файле или БД или другая БД тоже ...

0 голосов
/ 29 марта 2011

Если вы говорите о таблицах БД, вы можете использовать триггеры в БД или добавить дополнительный код в ваше приложение - возможно, с использованием аспектов. Если вы используете JPA, вы можете использовать прослушиватели сущностей или выполнить некоторую дополнительную логику, добавив некоторый аспект к вашему объекту DAO и применив конкретный аспект ко всем DAO, которые выполняют CRUD для сущностей, которые должны поддерживать исторические данные. Если ваш объект DAO является компонентом без сохранения состояния, вы можете использовать Interceptor, чтобы в другом случае использовать функцию прокси-сервера Java, cglib или другую библиотеку, которая может предоставить вам аспектную функциональность. Если вы используете Spring вместо EJB, вы можете посоветовать свои DAO в файле конфигурации контекста приложения.

0 голосов
/ 29 марта 2011

Вы можете попытаться создать, скажем, Список объектов из таблицы (при условии, что у вас есть объекты для данных).Что позволит вам пройтись по списку и сравнить с текущими данными в таблице?После этого вы сможете увидеть, произошли ли какие-либо изменения.

Вы даже можете создать другой список с объектом, который содержит перечислитель, который дает вам действие (DELETE, UPDATE, CREATE) вместе с новыми данными.

Не делал этого раньше, просто идея.

0 голосов
/ 29 марта 2011

Как упомянуто @Ashish, триггеры могут использоваться для вставки в отдельную таблицу - это обычно называется Таблица аудита-журнала или таблица журнала аудита .

Ниже приведены столбцы, обычно определяемые в такой таблице контрольного журнала: «Действие» (вставка, обновление, удаление), имя таблицы (таблица, в которую она была вставлена ​​/ удалена / обновлена), ключ (первичный ключ этой таблицы при необходимости ), отметка времени (время, когда было выполнено это действие)

Лучше вести журнал аудита после завершения всей транзакции.Если нет, то в случае, если исключение передается обратно на сторону кода, потребуется отдельный вызов для обновления таблиц аудита.Надеюсь, это поможет.

0 голосов
/ 29 марта 2011

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

0 голосов
/ 29 марта 2011

Вы должны попробовать использовать триггеры. У вас может быть отдельная таблица (точная копия вашей таблицы, из которой вам нужно вести историю).

Эта таблица будет обновляться триггером после каждой вставки / обновления / удаления в вашей основной таблице.

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

0 голосов
/ 21 марта 2011

Я думаю, что этого можно добиться, создав триггер в sql-сервере.вы можете создать TRIGGER следующим образом:

Синтаксис:

CREATE TRIGGER имя-триггера {BEFORE |ПОСЛЕ} {INSERT |ОБНОВЛЕНИЕ |DELETE} ON table_name FOR EACH ROW triggered_statement

вам нужно будет создать 2 триггера: один для выполнения операции, а другой - после ее выполнения.в противном случае это может быть достигнуто с помощью кода, но было бы немного утомительно для кода обрабатывать в случае пакетных процессов.

0 голосов
/ 21 марта 2011

Как это вопрос Java?

Это должно быть перемещено в разделе базы данных.

Вам необходимо создать таблицу истории. Затем создайте триггеры базы данных в исходной таблице для «создания или замены триггера перед вставкой, обновлением или удалением таблицы для каждой строки ....»

...