Sobes.tech
Back to questions
Junior — Middle
54

Каково предназначение аннотации @Version в JPA и как она влияет на управление конкурентным доступом к данным?

Answer from AI

sobes.tech AI

Аннотация @Version в JPA используется для реализации механизма оптимистической блокировки. Она помечает поле сущности, которое хранит версию записи (обычно целочисленное или временное значение). При обновлении записи JPA проверяет, что версия в базе совпадает с версией в объекте, чтобы убедиться, что данные не были изменены другим транзакционным потоком.

Если версии не совпадают, выбрасывается исключение OptimisticLockException, что предотвращает перезапись данных, изменённых параллельно. Это помогает управлять конкурентным доступом без использования блокировок на уровне базы.

Пример:

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

    @Version
    private Integer version;

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

Здесь поле version автоматически обновляется при каждом изменении сущности, обеспечивая контроль версий.