티스토리 뷰

728x90
반응형
양방향 매핑의 의미

양방향 매핑이란 두 엔티티 간에 서로 관계를 가진다는 의미를 가진다

예시) Member 테이블과 Team 테이블 관계

양방향 매핑

Member 엔티티는 단방향과 동일
@Entity
public class Member {
	@Id
	private Long id;

	@Column(name="USERNAME")
	private String name;

	@ManyToOne // 다 대 1 (Team 하나에 여러 Member 가 들어간다)
	@JoinColumn(name="TEAM_ID")
	private Team team;
}
Team 엔티티에는 컬렉션을 추가
@Entity
public class Team{
	@Id 
	private Long id;

	private String name;

	@OneToMany(mappedBy="team")
	private List<Member> merberList = new ArrayList<Member>(); //Member 와 연관관계
}

양방향 매핑의 객체 그래프 탐색

Team findTeam = em.find(Team.class, team.getId());//TEAM 조회
int memberSize = findTeam.getMemberList().size(); //TEAM을 통하여 MEMBER list 역방향 조회

객체와 테이블이 관계를 맺는 차이

  • 객체 연관관계 = 2개
    • 회원 → 팀 연관관계 1개(단방향)
    • 팀 → 회원 연관관계 1개(단방향)
  • 테이블 연관관계 = 1개
    • 회원 ↔ 팀의 연관관계 1개(양방향)

 

객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계를 가지는 것이다.
  • 객체를 양방향으로 참조하려면 단방향 두개를 가져야한다.

ex) A → B A가 B와 연관 맺을 때, B → A B가 A를 연관 맺을 때

 

//A -> B
class A {
	  B b;
}
//B -> A
class B {
	  A a;
}

- 테이블 같은 경우는 외래키 하나를 가지고 양방향으로 왔다 갔다할 수 있다.

그러나 객체의 연관 관계에서는 양방향을 가질 때 반드시 외래키 하나를 지정해주어야 한다.

이것이 연관관계의 주인(OWNER) 이다.

 

연관관계의 주인설정 및 양방향 매핑 규칙

  • 양방향 매핑 규칙
    • 객체의 두 관계 중 하나를 연관관계의 주인으로 지정
    • 연관관계의 주인만이 외래 키를 관리(등록, 수정)
    • 주인이 아닌 쪽은 조회만 가능
    • 주인은 mappedBy 속성 사용 안함
    • 주인이 아닌쪽은 mappedBy 속성으로 주인 지정
  • 주인 설정
    • 외래 키가 있는 곳을 주인으로 설정

 

양방향 매핑시 가장 많이 하는 실수

  • 연관관계의 주인에 값을 입력하지 않는 경우
  • 순수한 객체 관계를 고려하여 항상 양쪽다 값을 입력해주도록 한다.
  • 양방향 매핑 시 무한 루프 조심
    • toString, lombok, JSON 생성 라이브러리 사용
728x90
반응형
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함