✏️ 낙관적락 사용시 버전을 초기화 하지 않아 생긴 트러블 - 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에 값을 넣어주거나, 데이터들을 삭제한다.

✨ 결론

따라서 낙관적 락을 사용할 땐 버전 필드를 항상 신경써서 관리해야 한다.

또한 초기화되지 않은 상태에서 저장되는 엔티티는 커밋 시 오류가 발생할 수 있음을 잊지 말아야 한다.