Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 그래프
- 다익스트라
- 항해솔직후기
- 코딩테스트실력진단
- 알고리즘기본개념
- 코드트리
- Spring
- 트러블슈팅
- 백준
- 코딩테스트
- 코테
- BFS
- SSAFY
- SWEA
- Union Find
- JUnit
- JPA
- 항해플러스ai후기
- 다시보기
- DP
- 유니온파인드
- 항해플러스ai
- 싸피
- 그리디
- DFS
- database
- 알고리즘
- 자바
- 완전탐색
- Java
Archives
- Today
- Total
HwangHub
hibernate_sequence doesn't exist 본문
Entity의 PK를 @GeneratedValue(strategy = GenerationType.AUTO)로 해두었을 때 발생한 문제이다. 이 문제는 hibernate_sequence라는 테이블에서 PK를 조회하는데 해당 테이블이 존재하지 않아서 발생한다.
hibernate_sequence 테이블이란?
Hibernate5는 GenerationType.AUTO로 PK 생성 전략을 설정하면 다음 순서로 처리한다.
- @Id로 매핑된 Entity의 Field Type이 UUID라면 UUID Generator를 사용하여 생성한다.
- Integer나 Long 과 같은 numerical 타입이라면 Hibernate 설정 파일을 스캔하여 identifierGenerator를 사용하고 있는지 검사한다.
- 만약 사용하지 않으면 GenerationType.IDENTITY와 같이 처리한다.
- 만약 사용한다면, 해당 DB가 GenerationType.SEQUENCE를 지원하는지 확인하고, 지원하면 SEQUENCE 방식으로 처리한다.
- SEQUENCE 방식도 지원하지 않으면 GenerationType.TABLE과 같이 처리한다. 이 때, 키 전용 테이블인 Hibernate_sequence 테이블을 생성하고, 이를 향후에 활용하여 pk generation을 처리한다.
출처 : 티스토리 블로그
이 때 선택할 수 있는 방법이 두 가지 있다.
- DB 스키마 변경하기
- GenerationType 변경하기
첫번째 방법의 경우 일반적으로 ddl-auto를 update로 설정한다던가 하는 방식으로 대처하는 경우가 일반적인데, 이러한 방법은 운영 단계에서는 매우 리스크 있는 선택이다.
따라서 Database에 generationType을 위임하는 IDENTITY로 코드를 바꿔주었다.
AS-IS
public class Post extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
TO-BE
public class Post extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
'workspace > backend' 카테고리의 다른 글
BST의 시간복잡도 O(log N) 증명하기 (1) | 2024.01.07 |
---|---|
[이슈] 레디스 캐시 업데이트 이슈 트러블슈팅 (0) | 2024.01.05 |
[이슈] SQL로 DB 스키마 변경 (1) | 2023.12.31 |
[OAuth] 동작 원리 (0) | 2023.12.07 |
[Java] String, StringBuilder, StringBuffer의 차이에 대한 고리타분한 이야기 (0) | 2023.12.07 |
Comments