Структура данных / Техника Java для управления списком последовательных команд

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

Моя ситуация

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

  • У меня есть больше команд SQL, которые обновляют различные производные таблицы на основе промежуточной таблицы / фактического содержимого таблицы. Различные таблицы будут взаимодействовать с различными производными таблицами с помощью разных запросов (как обычно). Эти команды, возможно, придется чередовать с первым набором в зависимости от варианта использования - поэтому я не могу обязательно выполнить набор 1, а затем установить 2 все сразу.

Мой вопрос

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

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


Дополнительная информация

Одна из моих главных забот - прояснить все. Для уточнения у меня будет набор запросов, специально предназначенных для:

  • Усечь промежуточную таблицу A'и заполнить ее первичными ключами для записей об удалении
  • Удалить из фактической таблицы A на основе объединения с A'
  • Усечь промежуточную таблицу A'и заполнить ее полными данными для upserts
  • Обновление / вставка записей из A'в A на основе объединений

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

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

1 ответ

Решение

Не пиши такую ​​вещь сам. Для этого и родился JTA.

Вы можете использовать JPA или Spring, чтобы сделать это.

Аннотируйте единицу работы как транзакционную, и пусть база данных и JDBC обрабатывают ее.

Если вы должны сделать это самостоятельно, следуйте аспектно-ориентированному подходу и сделайте его декоративной реализацией "до и после".

Другие вопросы по тегам