Sobes.tech
Back to questions
Junior — Middle
75

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

Companies where asked
СБЕР КорпусСБЕР Корпус

Answer from AI

sobes.tech AI

Чтобы предотвратить одновременное обновление данных (проблему конкурентного доступа) при использовании Hibernate, применяют механизмы блокировок:

  1. Оптимистичная блокировка (Optimistic Locking):

    • Используется версия или временная метка (например, поле @Version в сущности).
    • При обновлении Hibernate проверяет, что версия в базе совпадает с версией объекта.
    • Если версия изменилась, выбрасывается исключение OptimisticLockException.
    • Подходит для систем с низкой конкуренцией.
  2. Пессимистичная блокировка (Pessimistic Locking):

    • Hibernate блокирует запись в базе на время транзакции.
    • Используются методы lock() с типами блокировок PESSIMISTIC_READ, PESSIMISTIC_WRITE.
    • Предотвращает одновременный доступ, но может снижать производительность.

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

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

    @Version
    private int version;

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

При обновлении Hibernate проверит версию и предотвратит потерю данных при одновременных изменениях.