Данные таблицы переопределяют - PullRequest
0 голосов
/ 08 ноября 2018

В настоящее время я получаю некоторые статические данные от третьей стороны. Это просто один ко многим, как это

garage:
    id
    name
    desc
    location
garage_price:
    id
    garage_id
    price_type
    price

Иногда данные неверны, и мне нужно будет их исправить. В то же время я хотел бы где-то сохранить исходные данные и, возможно, выполнить несколько запросов, чтобы показать изменения.

Мой вопрос заключается в том, делает ли кто-то что-то подобное с SQL, Java и Hibernate, и какой подход вы применили или выбрали бы.

Я мог бы добавить логический столбец "original_data" к обеим таблицам, и, прежде чем произойдет обновление, запустить триггер, чтобы скопировать строку из гаража или garage_price в таблицу "original_garage" или "original_price", пока original_data имеет значение правда. Затем установите для original_data значение false, и все дальнейшие обновления будут происходить только в таблицах garage / garage_price

Что-то не так с этим подходом, и как люди обычно работают с несколькими таблицами с одинаковыми данными в Hibernate / JPA? Ранее я создавал класс, который содержит все данные, и подклассировал бы его дважды, один раз для каждой таблицы, при установке

@ Наследование (стратегия = InheritanceType.TABLE_PER_CLASS)

на родителя.

1 Ответ

0 голосов
/ 08 ноября 2018

Как часто бывают разные варианты:

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

  2. Используйте подход, который вы описали: напишите исходный набор данных, скопируйте его перед изменением. Вам понадобятся два дополнительных атрибута:

    Флаг, обозначающий оригинал и технический идентификатор, имеет уникальный первичный ключ.

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

...