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 |
Tags
- intelij spring config
- @SubscribeMapping
- 기본키 전략
- m:n
- 알고리즘
- DTO
- 백준
- 리눅스
- spring
- API
- 은행원알고리즘
- 커밋 되돌리기
- application layer
- 오블완
- 쉘 스크립트
- 런타임 상수
- 프로그래머스
- 컴파일 타임 상수
- 무한정 대기
- Git
- @Autowired
- BindingResult
- 편향된 지수
- JPA
- 티스토리챌린지
- 파이썬
- compgen
- 쿠키
- JDBC
- allocationSize
Archives
- Today
- Total
둘셋 개발!
[JPA] 복합키 중 autoIncrement키가 있다면? 본문
intro.
테이블 설계를 참고해서 엔티티를 만들고 있었다.
그런데 그 중 여러개의 테이블에서 복합키를 사용할 수 있었고, 그 중 하나는 autoIncrement였다.
나는 @EmbeddedId 을 사용하고 id클래스를 생성하고
그 안에 autoIncrement 변수에 @GeneratedValue(strategy = GenerationType.IDENTITY) 애노테이션이 붙였다.
하지만....
복합키 내부의 @GeneratedValue(strategy = GenerationType.IDENTITY)는 동작하지 않는다
복합키 내부의 해당 애노테이션은 동작하지 않는 이슈가 있다.
이 전략은 키 생성을 db에게 위임한다.
그래서 엔티티를 영속성 컨텍스트에 영속화하려고 할 때, db에 저장한 후 db로 부터 기본키를 받아 영속성 컨텍스트에 저장하려고 한다.
하지만 실제로 사용하게 되면, db에서 기본키를 못가져온다.
db에 auto increment 속성을 켜두면, insert하면서 자동증분이 되긴 한다.
하지만 select로 다시 조회하지 않는 이상 해당 엔티티의 기본키를 알 수 있는 방법은 없다.
오류 화면
---- 스프링 부트 버전이 2점대는 해당 오류 화면이 나오지 않고, 그냥 통과한다.
이 화면은 3점대에서 볼 수 있다.
그렇다면 어떻게 해야하는가?
복합키 대신 단일키를 사용하자.
자동증분인 속성값만 키로 사용하면 된다.
사실 자동증분을 사용하는 컬럼 자체로 키의 필요충분조건을 만족시킬 수 있기 때문에 단일키로 사용하면 된다.
그리고 복합키로 사용하려던 컬럼은 index를 설정하여 조회 시 성능을 낼 수 있도록 하면 된다.
'JPA' 카테고리의 다른 글
[JPA] orphanRemoval 옵션 적용 버그 (0) | 2023.11.02 |
---|---|
[JPA] 일대다 양방향에서 '다'엔티티에 @JoinColumn을 생략하면 안되는 이유 (0) | 2023.09.22 |
[JPA] 다대일에서 update쿼리가 잘못 나갈 수 있다..! (0) | 2023.09.22 |
[JPA] Primary Key 자동 생성 전략 (0) | 2023.09.15 |
[JPA 기본편] Jpa 구동방식 (0) | 2022.03.26 |