728x90
반응형
양방향 연관관계란?
- 단방향 관계가 두개이다 이걸 양방향이라고 부른다.
- 외래키가 있는 곳이 양방향 관계의 주인이 된다.
- 양방향 보다 단방향이 깔끔하다.
객체와 테이블의 연관관계의 차이점.
테이블
- 멤버에서 소속된 팀을 알고 싶으면 TEAM_ID 로 Join 하면 된다.
- 팀에서 멤버를 조회할 때도 Join 을 쓰면된다.
객체
- 멤버에서 팀을 알고 싶으면 맴버객체에서 team의 Id 나 객체를 가져오면 된다.
- 팀에서 소속된 멤버를 알고 싶으면 해당 부분에서 문제가 발생한다.
단방향 맵핑의 문제점
객체 기준으로 봤을때 단방향에서는 Memeber 에서 Team으로 갈수는 있는데
Team 에서 Member를 가는 방법이 없었다.
Team 객체에서 소속된 멤버를 보려면 코드가 복잡해 졌다.
양방향 맵핑
단방향의 단점을 보완 해준다.
테이블처럼 객체도 Team에서 Member를 조회 할 수 있다.
양방향 맵핑 관계 구현
- @ManyToOne: N:1 을 표현할때 쓴다.
참고사항
- Member 객체기준으로 Member와 Team은 ManyToOne 관계 이다.
- @ManyToOne 어노테이션을 지정해준다.
Member
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
Team
- OneToMany: 해당 객체 기준으로 1:N 을 표현할때 쓴다.
참고사항
- @OneToMany(mappedBy = "team") mappedBy 를 적어주면 읽기만 가능하다.
- mappedBy 는 아래에 정리를 해두었습니다.
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
List<Member> members = new ArrayList<Member>();
…
}
정리
- 양방향 매핑을 통해 이제 Member에서 Team을 찾을수 있다.
- Team에서도 Member에 접근할수 있다.
- N:1 관계에서는 ManyToOne을 쓴다
- 1:N 관계에서는 OneToMany를 쓴다.
- 1:N 관계에서는 mappedBy를 해줘야 된다.
mappedBy란?
https://vprog1215.tistory.com/140?category=1007550
참고:https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21697?speed=1&tab=community&q=266753
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] mappedBy (0) | 2021.08.02 |
---|---|
[JPA] 연관관계 매핑기초3: 양방향 사용시 주의점 (0) | 2021.08.02 |
[JPA] 연관관계 매핑기초1: 단방향 연관관계 (0) | 2021.08.01 |
[JPA] 기본매핑 (0) | 2021.08.01 |
[JPA] 기본키 맵핑 (0) | 2021.07.31 |
댓글