일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP
- 프로그래머스
- 캐싱
- 오버라이딩
- 파이썬
- 멱등
- 강화학습
- 코테
- rest api
- 자바
- Merge sort
- bineary search
- BOJ
- 파이썬 오류
- 백준
- 딕셔너리
- 이진탐색
- 딥러닝
- 깊이우선탐색
- 알고리즘
- 너비우선탐색
- 비지도학습
- post
- 코딩
- 코딩테스트
- 해시
- 지도학습
- 스택과 힙
- 파이썬 알고리즘
- 머신러닝
- Today
- Total
chae._.chae
JPA @OneToMany 연관관계 : 1:N(일대다) 관계에서의 주인은 항상 다(N)!! 본문
@OneToMany 연관관계 설정시 유의해야 할 부분!
데이터베이스 컬럼에는 값이 여러 개 들어갈 수 없다.
당연한거지만 단순하게 생각하고 넘어가 테이블 설계시 어려움을 겪었다.
각 Portfolio를 어떤 User가 작성했는지를 보기 위해, 유저의 정보를 모아둔 UserInfo테이블을 생성하여
UserInfo테이블에 Portfolio리스트를 만들어서, 각 유저가 작성한 Portfolio의 id를 넣어두었다.
UserInfo 테이블과 Portfolio테이블에서 UserInfo에서 Portfolio_id(리스트)를 조회하려고
1:N (일대다) @OneToMany 연관관계를 맺어주었다.
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "userInfo")
public class UserInfo {
@Id // Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "portfolio_id")
private List<Portfolio> portfolios_id;
}
UserInfo 테이블에 portfolio_id를 리스트로 넣으려고 했음
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "portfolio")
public class Portfolio {
@Id // Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
}
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "portfolio")
public class Portfolio {
@Id // Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private User user;
}
Portfolio테이블에 User 컬럼을 추가해줬다! (결국 UserInfo테이블과 연관관계를 설정한 이유도 해당 포트폴리오의 사용자_id를 알기위해서 였음)
연관관계를 변경해줌으로써, UserInfo 테이블에 id컬럼만 생성되어 UserInfo테이블을 없애기로 했다.
Portfolio테이블에 user컬럼이 만들어져, 이제 유저정보를 가져올 수 있게 되었다.
즉, UserInfo 테이블에 porfolio_id를 넣는 것이 아닌 Porfolio테이블에 UserInfo_id를 넣어줘야한다.
@JoinColumn을 둔 엔티티에 외래키가 생성되고 관리한다.
1:N(일대다) 관계에서의 주인은 항상 다(N)이다.
'스프링 > 스프링 공부' 카테고리의 다른 글
JSON 배열 형태로 데이터 주고받기 (0) | 2022.07.23 |
---|---|
스프링의 전통적인 트랜잭션 (0) | 2022.05.08 |
Persistence Context란 ? (0) | 2022.02.27 |