일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- pandas
- 이펙티브 자바
- docker
- java
- 자바
- JPA
- dfs
- dataframe
- UML
- spring security
- ddd
- 스프링
- equals
- 포트앤어댑터 아키텍처
- 헥사고날 아키텍처
- BFS
- 문자열
- 다익스트라
- Redis
- 위상정렬
- springboot
- 비트마스크
- disjoint set
- DP
- series
- 알고리즘
- 데이터 flow
- 세그먼트 트리
- 파이썬
- Today
- Total
코딩못하는사람
JPA 중복 칼럼 에러 본문
JPA를 공부하기 위해 미니 프로젝트를 진행할 때
선물 엔티티에 구매한 회원,받은 회원으로 회원 외래키를 단방향으로 두개 참조해야 하는 구조였다.
JPA 공부할 때 @JoinColumn에는 매핑할 외래키 이름으로 name설정을 해줘야 한다는 기억으로 단순하게 다음과 같이 코드를 작성했었다.
하지만 바~로 에러가 발생했다.
Repeated column in mapping for entity: gifticon.giticonshop.domain.Gift column: member_id
should be mapped with insert="false" update="false" 읽기 전용으로 바꿔서 뻘짓도 했지만
DB에 JPA로 생기는 테이블을 ddl-auto: create 모드로 설정해주고 반복해서 이름을 바꿔보면서 column들을 관찰했다.
그결과 @JoinColumn 어노테이션이 칼럼명을 만드는 방법과 외래키 Join해주는 방법을 확실히 알게 되었다.
JoinColumn은 어노테이션이 붙은 필드의 엔티티를 추적해서 그 엔티티의 PK를 Join 시켜준다.
name 설정에 member어노테이션의 PK id 칼럼명 "member_id"와 딱 맞아야 하는게 아니였다.
name은 내 엔티티에서 외래키 칼럼명을 만들어주는 설정이였던 것이다.
Member가 하나였으면 식별하기 쉽게 member_id로 하는게 맞지만 다음과 같은 경우는
name값을 두개 각각 다르게 설정해주거나 작성해주지 않고
"기본값인 필드명+_+참조하는 외래키의 기본키 칼럼명"을 따르면
BUY_MEMBER_MEMBER_ID, GET_MEMBER_MEMBER_ID로 설정되어 연관관계 매핑이 가능했다.
배운점
하나의 엔티티에서 같은 엔티티를 두개 이상 참조할때 방법
연관관계 매핑시 JoinColumn의 동작방법 및 Column생성 방식
'issue 기록' 카테고리의 다른 글
Nginx 헬스 체크 (0) | 2022.01.05 |
---|---|
JPA/ could not initialize proxy - no Session (9) | 2021.09.14 |
JPA delete관련 에러 (Cascade 영속성 전이 관련 에러) (3) | 2021.08.19 |
BCryptPasswordEncoder 패스워드 암호화 관련 이슈 (0) | 2021.07.23 |
@AllArgsConstructor,@NoArgsConstructor (0) | 2021.06.05 |