✏️ 낙관적락 사용시 버전을 초기화 하지 않아 생긴 트러블 - LIMITED-TEAM25/wiki_repository GitHub Wiki
✔️ 문제 상황
Hibernate에서 @Version 필드를 사용하는 경우 해댕 필드가 null 이면 다음 커밋 시점에 NPE가 발생할 수 있다.
✔️ 원인
Hibernate는 내부적으로 version + 1을 수행하기 위해 현재 버전 값을 가져오는데,
@Version 필드가 null 이면 이를 수행할 수 없어 예외가 발생한다.
✔️ 해결방법
생성시 version 값을 초기화해준다.
@Version private Integer version;
private Limited(...) {
this.version = 0;
}
- 혹시 기존 데이터가 남아 있다면 UPDATE SET 을 이용해 version에 값을 넣어주거나, 데이터들을 삭제한다.
✨ 결론
따라서 낙관적 락을 사용할 땐 버전 필드를 항상 신경써서 관리해야 한다.
또한 초기화되지 않은 상태에서 저장되는 엔티티는 커밋 시 오류가 발생할 수 있음을 잊지 말아야 한다.