기본편(5) - 연관관계 매핑 기초

bin1225·2021년 10월 2일
0

JPA

목록 보기
5/12
post-thumbnail

연관관계가 필요한 이유

  • 테이블과 객체의 차이
    - 테이블은 외래 키로 조인을 사용해 연관된 테이블을 찾는다.
    EX) TEAM_ID(FK) -> TEAM_ID(PK)
    - 객체는 참조를 사용해 연관된 객체를 찾는다
    EX) Member.getTeam();

기본 매핑으로 테이블에 맞춰서 객체를 설계했을 때 문제는 이러한 차이점 때문에 객체지향스럽지 않게 된다.
조회, 저장 등 로직에서 계속 TEAM ID와 TEAM 객체를 변형해가며 저장하고 조회하는데 이용해야함.

단 방향 연관관계

  • 객체 지향 모델링
    객체의 참조와 테이블의 외래 키를 매핑한다.
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;

@JoinColum 을 통해 외래키와 참조를 매핑하고
@ManyToOne 어노테이션을 통해 어떤 유형의 매핑인지를 지정해준다.
이를 통해 JPA가 데이터를 객체지향에 맞게 조회, 저장, 수정할 수 있도록 작동한다.
EX) member.getTeam(), member.setTeam(team)

양방향 연관관계와 연관관계의 주인

  • 양방향 매핑
    @mappedBy 어노테이션을 통해 역방향으로 그래프를 탐색할 수 있도록 한다.
    즉 team 에서 member를 조회할 수 있도록 설정
@OneToMany(mappedBy = "team")
 List<Member> members = new ArrayList<Member>();

member<List> 객체를 하나 생성하고 mappedBy를 통해 연관관계를 지정한다.
하지만 연관관계의 주인이 아닌 쪽은 읽기만 가능하기 때문에 데이터를 수정할 수 없다.

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

객체는 양방향 매핑에서 실제로는 단방향 두개의 연관관계를 맺는다.
하지만 테이블은 외래키 하나로 연관관계를 맺는다는 차이가 있다.

즉 객체와 테이블을 연결 했을 때 누가 테이블의 왜래 키를 관리 할 것인지 정해야한다.
* mappedBy 가 안 붙은 쪽이 주인, 외래키 관리

양방향 매핑시 주의사항

• 순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자 -> 연관관계 편의 매소드 이용
* 연관관계 편의 매소드 예시

public void setTeam(Team team){
	member.setTeam(team);
    	Team.addMember(this);
}
이런 식으로 양쪽 객체에 각각 값을 주입되도록 설정한다.

• 비즈니스 로직에서 중요하다고 연관관계의 주인이 되는 게 아니다

• 최대한 단 방향 매핑으로 설계를 마친 후 필요시에만 양방향 매핑을 사용한다. 생각할 게 많아지고 복잡해지니 최대한 지양한다.

0개의 댓글

관련 채용 정보