Back to questions
СБЕР Корпус
Junior — Middle
75
Каким образом можно предотвратить одновременное обновление данных при использовании Hibernate?
Companies where asked
Answer from AI
sobes.tech AI
Чтобы предотвратить одновременное обновление данных (проблему конкурентного доступа) при использовании Hibernate, применяют механизмы блокировок:
-
Оптимистичная блокировка (Optimistic Locking):
- Используется версия или временная метка (например, поле
@Versionв сущности). - При обновлении Hibernate проверяет, что версия в базе совпадает с версией объекта.
- Если версия изменилась, выбрасывается исключение
OptimisticLockException. - Подходит для систем с низкой конкуренцией.
- Используется версия или временная метка (например, поле
-
Пессимистичная блокировка (Pessimistic Locking):
- Hibernate блокирует запись в базе на время транзакции.
- Используются методы
lock()с типами блокировокPESSIMISTIC_READ,PESSIMISTIC_WRITE. - Предотвращает одновременный доступ, но может снижать производительность.
Пример оптимистичной блокировки:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
// геттеры и сеттеры
}
При обновлении Hibernate проверит версию и предотвратит потерю данных при одновременных изменениях.