Entity Versioning
Optimistic Lock with version columns
spring jpa
Entity Versioning
JPA 에서는 @Version Column 을 사용하여 Optimistic Lock 을 지원한다. 따라서 여러 사람이 동일한 데이터의 저장/수정/삭제를 요청한 경우 발생할 수 있는 lost update(나중에 수정/삭제한 내용으로 덮어 쓰이는 것) 를 방지한다.
- Entity
@Version
@Column(nullable = false)
val version: Int
Persist
Product product = new Product();
product.setId(1L);
entityManager.persist(product);
INSERT INTO product (
quantity,
version,
id
)
VALUES (
0,
0,
1
)
Update
Product product = entityManager.find(
Product.class,
1L
);
product.setQuantity(5);
UPDATE
product
SET
quantity = 5,
version = 1
WHERE
id = 1 AND
version = 0
Delete
Product product = entityManager.getReference(
Product.class,
1L
);
entityManager.remove(product);
DELETE FROM
product
WHERE
id = 1 AND
version = 1