Sobes.tech
Back to questions
Middle — Middle+
77

Каким образом можно обеспечить оптимистическую блокировку для управления параллельными обновлениями данных?

Companies where asked
Prooftech
СБЕРСБЕР
Т-БанкТ-Банк
AstonAston

Answer from AI

sobes.tech AI

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

В Java это часто реализуется с помощью версии сущности — например, поля version в базе данных. При чтении данных сохраняется версия, при обновлении проверяется, что версия в базе не изменилась. Если изменилась — значит, кто-то другой обновил данные, и операция прерывается или повторяется.

Пример с JPA:

@Entity
public class Product {
    @Id
    private Long id;

    @Version
    private int version; // поле для оптимистической блокировки

    private String name;
    // геттеры и сеттеры
}

При сохранении JPA автоматически проверит, что версия не изменилась с момента чтения. Если изменилась, выбросит OptimisticLockException.

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