티스토리 뷰
1. 단방향 vs 양방향
1.1. 단방향
- 한 쪽만 참조하는 것
1.2. 양방향
- 양쪽 모두 서로 참조하는 것
사진을 보면 알 수 있듯이 방향은 객체관계에만 존재하고 테이블 관계는 항상 양방향
2. 양방향 연관관계
2.1. 객체 연관관계
- 회원→팀 (Member.team) : 다대일 관계
- 팀→회원 (Team.members) : 일대다 관계
2.2. 테이블 연관관계
- 외래 키 하나로 양방향으로 조회할 수 있다.
3. 양방향 연관관계 매핑
들어가기 앞서 . . .
회원→팀 (Member.team) : 다대일 관계
팀→회원 (Team.members) : 일대다 관계
3.1. 매핑한 회원 엔티티
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name = "member_id")
private Long id;
private String username;
@ManyToOne
@JoinColumn(name="team_id")
private Team team;
//연관관계 매핑
public void setTeam(Team team){
this.team=team;
}
//Getter, Setter...
}
- @ManyToOne: 회원→팀이 다대일(N:1)관계이므로
- @JoinColumn(name="team_id")
- 외래 키를 매핑할 때 사용
- name 속성에는 매핑할 외래 키 이름을 지정 (매핑할 테이블의 column 어노테이션 안의 name 값)
3.2. 매핑한 팀 엔티티
@Entity
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "team_id")
private Long id;
private String name;
//====추가=====//
@OneToMany(mappedBy="team")
private List<Member> members = new ArrayList<Member>();
//Getter, Setter...
}
- @OneToMany: 팀→회원이 일대다 관계이므로
- @mappedBy
- Team.members는 연관관계의 주인이 아님을 설정
- mappedBy 속성의 값은 연관관게의 주인인 Member.team
4. 연관관계의 주인
- 연관관계의 주인은 테이블에 외래 키(FK)가 있는 곳으로 정한다
- N:1, 1:N관계에서는 항상 "다"쪽이 외래 키(FK)를 가진다.
→ 다 쪽인 @ManyToOne은 항상 연관관계의 주인이 되므로 mappedBy를 설정할 수 없다!
위 그림에서는 member 테이블이 외래 키 team_id를 가지고 있으므로 Member.team이 주인이 된다.
참고
- 자바 ORM 표준 JPA 프로그래밍
'Spring > JPA' 카테고리의 다른 글
[JPA] MultipleBagFetchException와 N+1문제 동시에 해결하기 (1) | 2023.09.24 |
---|---|
[JPA] entity에서 생성시간, 수정시간 반영하는 법 (1) | 2023.01.28 |
[JPA] Querydsl에서 ElementCollection Projection 할 때 에러-org.hibernate.QueryException: not an entity (0) | 2023.01.27 |
MapStruct를 이용해 Dto->Entity 변환하기 (0) | 2023.01.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- restapi
- 빌더 패턴
- jpa
- 프록시패턴
- Iterator Pattern
- 반복자 패턴
- Chain of Responsibility
- 플라이웨이트패턴
- 컴포지트패턴
- GithubActions
- CompositePattern
- 책임체인패턴
- 메멘토 패턴
- FacadePattern
- 복합체 패턴
- 퍼싸드패턴
- 프로토타입 패턴
- 양방향연관관계
- 브리지 패턴
- dfs
- java문법
- 구글로그인
- 책임연쇄패턴
- idtoken
- ArrayDeque
- springsecurity
- Flutter
- 상태 패턴
- UML 필요성
- n+1
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함