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