728x90
OPTIMISTIC
@Version만 적용했을 때는 엔티티를 수정해야 버전을 체크하지만 이 옵션을 추가하면 엔티티를 조회만 해도 버전을 체크한다. 한 번 조회한 엔티티는 트랜잭션을 종료할 때까지 다른 트랜잭션에서 변경되지 않음을 보장한다.
- 용도 : 조회 시점부터 트랜잭션이 끝날 때까지 조회한 엔티티가 변경되지 않음을 보장한다.
- 동작 : 트랜잭션을 커밋할 때 버전 정보를 조회해서 현재 엔티티의 버전과 같은지 검증한다(SELECT 쿼리 사용). 만약 같지 않으면 예외가 발생한다.
- 이점 : OPTIMISTIC 옵션은 DIRTY READ와 NON-REPEATABLE READ를 방지한다.
- DIRTY READ : 커밋되지 않은 데이터를 읽을 수 있다. 예를 등러 트랜잭션1이 데이터를 수정하고 있는데 커밋하지 않아도 트랜잭션 2가 수정 중인 데이터를 조회할 수 있다.
- NON-REPEATABLE READ : 커밋한 데이터만 읽을 수 있다. 반복해서 같은 데이터를 읽을 수 없는 상태를 의미한다.
- 데이터베이스들은 보통 Dirty READ는 허용하지 않지만 READ COMMITED는 허용하는 격리 수준을 기본으로 사용한다.
출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
(Spring Data JPA)리스트에서 첫번째 값만 가져오기 (0) | 2022.08.24 |
---|---|
페이징 한계돌파 시, ToMany 관계를 Entity -> DTO로 표현하는 방법 (0) | 2022.07.14 |
@CreatedBy, @ModifiedBy 사용하기 (0) | 2022.06.21 |
@Converter (부제 - 데이터 변환) (0) | 2022.06.21 |
Spring data JPA 쿼리 생성 기능 (0) | 2022.06.19 |