작성
·
288
0
안녕하세요.
call next value의 역할이 정확히 무엇이고 언제 호출되나요?
아래 코드를 작성하면서 의문이 들었습니다.
(제가 강의도 듣고 JPA 책도 보고있어서 코드는 JPA 책과 유사합니다!! )
allocationSize를 지정하지 않아서 기본값 50이 적용되는 예시입니다.
Board boardA = new Board();
em.persist(boardA);
처음으로 테이블을 깨끗하게 create하고 boardA 객체를 em에 persist하면 call next value 문이 두 번 나가더라고요.
Hibernate:
call next value for BOARD_SEQ
Hibernate:
call next value for BOARD_SEQ
다음에 다른 transaction에서 다른 객체를 persist하니 call next value가 한번 나갔습니다.
Board boardB = new Board();
em.persist(boardB);
Hibernate:
call next value for BOARD_SEQ
그리고 DB를 까보니까 1, 52로 저장되어 있더라고요.
그래서 1, 2-51, 52-101 이런식으로 allocation해서 쓰는구나 라고 이해했는데요.
그렇다면 call next value for BOARD_SEQ은 아예 allocation된 값이 없을 때(최초로 1일 때, 52일때 등등) 식별자 값을 알기 위해서도 불리고 allocation된 값을 모두 사용했을 때(1, 51 등등)도 다음 값을 위해서 50개씩 미리 땡겨놓기 위해서도 불리는 것인가요?
그런데 그렇다고 하기에는 allocationSize를 1로 설정하면 call next value가 최초로 1일 때도 한 번만 불리던데, 이것은 왜 그런 것인가요? 얘도 다음 값을 위해 미리 1개씩 땡겨놔야 하는 것이 아닌지 궁금합니다.
감사합니다.
답변 1
0
안녕하세요. asdf5184님
1. 먼저 데이터베이스 시퀀스에 대해서 학습해주세요.
2. 그리고 다음을 참고해주세요.
https://www.inflearn.com/questions/284630
3. 처음에 두번 나가는 이유는 데이터를 추가하지 않고, H2 데이터베이스 웹 화면에서 BOARD_SQL 시퀀스 값을 확인해보시면 이해가 되실거에요.
감사합니다.