Структура данных / Техника Java для управления списком последовательных команд
Я не уверен, существует ли что-то особенное для этого варианта использования - но это было похоже на случай, когда кто-то, вероятно, сделал какую-то полезную структуру / технику / дизайн-шаблон.
Моя ситуация
У меня есть набор команд SQL, выполняемых из среднего уровня (Java), для вставки / обновления / удаления данных в любой из набора очень больших таблиц через объединения из связанной промежуточной таблицы.
У меня есть больше команд SQL, которые обновляют различные производные таблицы на основе промежуточной таблицы / фактического содержимого таблицы. Различные таблицы будут взаимодействовать с различными производными таблицами с помощью разных запросов (как обычно). Эти команды, возможно, придется чередовать с первым набором в зависимости от варианта использования - поэтому я не могу обязательно выполнить набор 1, а затем установить 2 все сразу.
Мой вопрос
Итак, мне нужно создать цепочку команд, которые выполняются последовательно, и мне нужно вызвать откат, если какая-либо из них не удалась. Я хотел бы сделать это наиболее понятным, документированным способом.
Кто-нибудь знает стандартный способ кодирования этого? Я уверен, что любой, кто перешел с кода хранимой процедуры на код среднего уровня, делал это раньше, и я не хочу изобретать велосипед, если есть хорошие варианты.
Дополнительная информация
Одна из моих главных забот - прояснить все. Для уточнения у меня будет набор запросов, специально предназначенных для:
- Усечь промежуточную таблицу A'и заполнить ее первичными ключами для записей об удалении
- Удалить из фактической таблицы A на основе объединения с A'
- Усечь промежуточную таблицу A'и заполнить ее полными данными для upserts
- Обновление / вставка записей из A'в A на основе объединений
Та же логика будет применяться к таблицам B, C, D и т. Д. К сожалению, это может быть в случае, когда только A и C требуется дополнительный шаг, такой как синхронизация удалений с определенной производной таблицей, которая должна быть сделана после удалений, но до upserts.
Я бы, очевидно, хотел бы сгруппировать всю логику для обновления таблицы, и я бы хотел сгруппировать всю логику для обновления производной таблицы, но во время выполнения они должны быть интеллектуально чередованы, и это звучит для меня грязно.
1 ответ
Не пиши такую вещь сам. Для этого и родился JTA.
Вы можете использовать JPA или Spring, чтобы сделать это.
Аннотируйте единицу работы как транзакционную, и пусть база данных и JDBC обрабатывают ее.
Если вы должны сделать это самостоятельно, следуйте аспектно-ориентированному подходу и сделайте его декоративной реализацией "до и после".