Назад к вопросам
Senior
6
Расскажи про блокировки в JPA. Какие использовал?
Компании, где спрашивали
Позитив Технолоджис
Ответ от нейросети
sobes.tech AI
В JPA существуют два основных типа блокировок:
-
Оптимистичные блокировки (Optimistic Locking)
- Используются для предотвращения конфликтов при параллельном обновлении данных.
- Реализуются с помощью аннотации
@Versionв сущности. - При обновлении проверяется версия записи; если версия изменилась с момента чтения, выбрасывается исключение
OptimisticLockException. - Подход подходит для систем с низкой конкуренцией за данные.
-
Пессимистичные блокировки (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 проверит версию и выбросит исключение, если данные были изменены другим процессом.
Использовал оба типа блокировок в зависимости от требований к согласованности и производительности.