연관관계 매핑

김혁준·2024년 6월 28일

JPA

목록 보기
5/16

연관관계가 필요한 이유

객체를 테이블에 맞추어 데이터 중심으로 모델링하면 협력 관계를 만들 수 없다.
객체지향 방식에서는 참조를 통해 바로 조회가 가능하다. 하지만 DB에서는 외래키를 가지고 조인 쿼리를 실행해서 조회한다. 객체지향에서 테이블에 맞추면 멤버변수에 외래키를 넣고 조회시 외래키를 찾은 후 이걸 가지고 조회하는데 그러면 객체지향의 장점이 사라진다. 따라서 연관관계가 필요하다.

단방향 연관관계

// 데이터 중심
private int team_id

// 연관관계 활용
@ManyToOne
@JoinColumn(name = "team_id)
private Team team
...
// 연관관계를 통해 객체지향스럽게 코딩 가능, 참조로 연관관계 조회(객체 그래프 탐색) 가능
Member member = new Member();
member.setTeam(team)

양뱡향 연관관계과 연관관계의 주인

mappedBy?

객체와 테이블 간에 연관관계를 맺는 차이를 이해해야 한다.
객체의 연관관계는 2개. 회원 -> 팀, 팀 -> 회원
테이블의 연관관계는 1개. 회원 <-> 팀
객체의 양방향 관계는 사실 서로 다른 단 방향 관계 2개이다.
객체를 양방향으로 참조하려면 단방향 연관관계 2개를 만들어야 한다.
반면 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리한다.
그러면 두 객체 중 하나로 외래키를 관리해야 매핑이 가능하다.
이때 연관관계의 주인이라는 개념이 나온다.

연관관계의 주인

연관관계의 주인만이 외래 키를 관리.
주인이 아닌 쪽은 읽기만 가능
주인은 mappedBy 속성 사용 안하고 반대 객체에 mappedBy 속성으로 주인을 지정한다.
비즈니스 로직을 기준으로 연관관계의 주인을 선택하지 말고 외래 키의 위치를 기준으로 정한다.

양방향 매핑시 주의점

주인 테이블과 반대 테이블 둘다 값을 입력해야 한다. 이때 set메서드말고 편의 메서드를 만들어 실수를 방지하자.

양방향 매핑 정리

단방향 매핑만으로도 이미 연관관계 매핑은 완료된다. 그러니 처음엔 넣지말고 필요할 때 추가하자
양방향 매핑은 반대 방향으로 객체 그래프 탐색 기능이 추가된 것 뿐이다.
JPQL 사용시 역방향으로 탐색할 일이 많다.

출처 : 인프런 자바 ORM 표준 JPA 프로그래밍 - 기본편

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

0개의 댓글