jowoohyeong / TIGENSOFT

0 stars 0 forks source link

기본키 매핑 어노테이션 정리 @Id, @GeneratedValue, @SequenceGenerator #16

Open jowoohyeong opened 1 year ago

jowoohyeong commented 1 year ago

@Id

@GeneratedValue =====

1. IDENTITY 전략

jowoohyeong commented 1 year ago

2. SEQUENCE 전략

allocationSize의 작동방법

  1. 최초 persist() 호출시 데이터베이스의 시퀀스 nextValue를 두번 호출하여 시작값과 끝값을 가져온다.
  2. 어플리케이션에서 시작값이 끝값이 될 때까지 시퀀스를 메모리에서 할당해준다.
  3. 시퀀스를 끝값까지 전부 사용하게 되면 다시 시퀀스를 호출하는데, 여기서 JPA는 allocationSize를 보고 다음 시작값을 계산한다. 끝값 = 현재값 + allocationSize, 시작값 = 끝값 - (allocationSize -1)
  4. 2번과 3번을 반복한다.

allocationSize 설정 시 주의할 점

allocationSize의 기본 값은 50이다. 그런데 만약 실제 데이터베이스의 시퀀스 증가 값은 1일 때 어떤 일이 벌어질까? 위의 작동 방법대로라면, 3번 동작 즉, 2번째 시작 값을 계산할 때 시작 값이 음수가 된다. 그리고 시작 값부터 시퀀스가 계속 할당되고 끝 값으로 가게 되면 언젠 가는 이미 존재하는 시퀀스를 참조하게 되어 에러가 발생하게 된다.

https://yoonbing9.tistory.com/19