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

Расскажи про блокировки в JPA. Какие использовал?

Компании, где спрашивали
Позитив Технолоджис

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

sobes.tech AI

В JPA существуют два основных типа блокировок:

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

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

    • Захватывают блокировку на уровне базы данных при чтении или обновлении.
    • Используются методы EntityManager.lock(entity, LockModeType.PESSIMISTIC_WRITE) или через JPQL с LOCK.
    • Гарантируют, что другие транзакции не смогут изменить или прочитать данные до освобождения блокировки.
    • Подход подходит для высококонкурентных сценариев, где важна целостность данных.

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

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

    @Version
    private Integer version;

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

При обновлении JPA проверит версию и выбросит исключение, если данные были изменены другим процессом.

Использовал оба типа блокировок в зависимости от требований к согласованности и производительности.