Что такое оптимистическая и пессимистическая блокировка в 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);
// теперь запись заблокирована для других транзакций
Оптимистическая блокировка лучше подходит для систем с низкой конкуренцией, пессимистическая — когда важна строгая последовательность изменений и высокая конкуренция.