Sobes.tech
Junior — Middle
84

Можете объяснить назначение аннотации @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 помогает избежать потери данных при параллельном обновлении без использования блокировок на уровне базы.