티스토리 뷰
반응형
JPA가 제공하는 낙관적 락을 사용하려면 @Version 애노테이션을 사용해서 버전 관리 기능을 추가해야 한다.
@Version 적용 가능 타입은 다음과 같다.
Long, Integer. Short, Timestamp
@Entity
public class MyEntity implements Serializable {
@Id
@GeneratedValue
private Long id;
private String name;
@Version
private Long version;
//...
}
Board board = em.find(Board.class, id); // transaction version = 1
// transaction 2에서 해당 게시물을 수정해서 title = "제목C", version = 2로 증가
board.setTitle("제목B");
save(board);
tx.commit(); // 예외 발생. 데이터베이스 Version = 2, Entity = 1
2개의 사용자가 각각 board 내용을 수정했다고 했을때 transaction이 잡힐때마다 1씩 증가하게 된다.
현재 Transaction에서 가지고 있는 Version 정보와 Entity에 저장된 Transaction Version 정보가 달라지게 되면 Error 가 발생하게 된다.
Version을 사용하면 최초 커밋만 적용된다.
반응형
'Study > JPA' 카테고리의 다른 글
1차 캐시 와 2차 캐시 (1) | 2019.04.10 |
---|---|
Transaction 범위 영속성 컨텍스트, 준영속 상태 (0) | 2019.04.10 |
낙관적 락, 비관적 락 (0) | 2019.04.10 |
준영속 상태에서의 지연 로딩 문제 해결 방법 (0) | 2019.04.10 |
JPA Entity type, value type 의 특징 (0) | 2019.04.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- java 설정
- github image 첨부시 주의할점
- jstl 커스텀 태그
- JSTL
- java calendar
- spring property
- java 폴더구조 구하기
- coroutine
- POE Excel 만들기
- java 특정문자 갯수구하기
- JSP 세션
- jstl split
- MyBatis 팁
- POI EXCEL
- java 압축 풀기
- mybatis Merge
- Kotlin
- 전자정부프레임워크 tiles
- spring ExcelView
- 코루틴
- Database#transaction
- jstl foreach
- java 설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함