Я пытаюсь проверить, соответствует ли уровень изоляции SERIALIZABLE следующему случаю: таблица events содержит записи событий, запланированных на определенную дату и время для конкретного пользователя. Сервис должен проверить отсутствие запланированных событий для данного пользователя и временного интервала, а также, если нет событий, создать новое событие (операция upsert).
@Transactional(isolation = Isolation.SERIALIZABLE)
@Override
public Event createEvent(Event event) {
eventRepository.checkIfNoEventExists(event);
...
// load entities from different tables and inject to event
...
eventRepository.save(event);
}
Будет ли эта транзакция блокировать другие параллельные транзакции, которые выполняют операцию записи в другие таблицы? Как лучше всего справляться со сбоями:
не удалось сериализовать доступ из-за зависимостей чтения / записи между транзакциями
Было бы лучше ограничить область действия уровня изоляции SERIALIZABLE просто проверкой и сохранением (например, в пользовательском методе хранилища)?