Sobes.tech
Назад к вопросам
Senior
4

Что такое оптимистическая и пессимистическая блокировка в Hibernate?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Hibernate оптимистическая и пессимистическая блокировки — это механизмы управления конкурентным доступом к данным.

Оптимистическая блокировка предполагает, что конфликты при одновременном обновлении данных редки. Она не ставит блокировки на записи в базе, а проверяет при сохранении, не изменились ли данные с момента их чтения. Обычно реализуется через версионное поле (например, @Version). Если версия изменилась, выбрасывается исключение, и транзакция откатывается.

Пример использования оптимистической блокировки:

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

    @Version
    private int version;

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

Пессимистическая блокировка предполагает, что конфликты вероятны, и сразу блокирует запись в базе на время транзакции, чтобы другие транзакции не могли её изменить. В Hibernate это можно сделать через методы lock() с типом блокировки, например LockMode.PESSIMISTIC_WRITE.

Пример пессимистической блокировки:

Product product = session.get(Product.class, id, LockMode.PESSIMISTIC_WRITE);
// теперь запись заблокирована для других транзакций

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