Допустимый случай для Сериализуемого уровня изоляции - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь проверить, соответствует ли уровень изоляции 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 просто проверкой и сохранением (например, в пользовательском методе хранилища)?

...