티스토리 뷰

Study/JPA

@Version

dev ms 2019. 4. 10. 23:36
반응형

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을 사용하면 최초 커밋만 적용된다.

반응형