본문 바로가기
JPA

JPA 연관관계 매핑 기초

by ppirae 2022. 5. 13.

연관관계 매핑 기초

 

객체지향 설계의 목표는 자율적인 객체들의
협력 공동체를 만드는 것이다.
- 조영호(객체지향의 사실과 오해)

( 책 추천 : 객체지향의 사실과 오해, 오브젝트 )

 

객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다.

따라서 객체 연관관계를 사용한 객체 지향 모델링을 해야한다.

 

단방향 연관관계는  -> 간단하고 어렵지 않다.

Member class 기준

private Team team; 을 선언한 후

@ManyToOne @JoinCoulmn(name = "TEAM_ID") 어노테이션을 달아주면 된다.

 

양방향 연관관계와 연관관계의 주인 -> 어렵다 (연관관계 매핑의 핵심)

양방향은  Member class는 그대로 두고

Team class에 

private List<Member> members = new ArrayList<>(); 를 선언하고

@OneToMany(mappedBy = "team") 이 필요하다.

mappedBy는 MemberClass의 team과 연관되어 있다는 것을 알려준다.

 

이후부터는 반대로 탐색도 가능하다.

객체는 가급적이면 단방향이 좋다.


연관관계의 주인 (Owner)

객체의 양방향 관계는 사실 단방향 관계 2개가 존재한다고 볼 수 있다.

그에 반해 테이블은 외래 키 하나로 연관관게를 양방향 관계로 가지고 있다.

따라서 테이블과 객체를 연결할 때 Team team과 List members 중 하나로 외래 키를 관리해야 한다.

이때 연관관계의 주인이라는 개념이 필요하다.

 

양방향 매핑 규칙

  • 객체의 두 관계중 하나를 연관관계의 주인으로 지정
  • 연관관계의 주인만이 외래 키를 관리(등록, 수정)
  • 주인이 아닌쪽은 읽기만 가능
  • 주인은 mappedBy 속성 사용 X
  • 주인이 아니면 mappedBy 속성으로 주인 지정

누구를 주인으로 ? -> 외래 키가 있는 곳을 주인으로

( 또는 ManyToOne에서 Many쪽이 좋다. )


인프런 김영한님의 JPA 기본편을 듣고 작성한 글입니다.

https://inf.run/87Mz

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

'JPA' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2022.05.16
연관관계의 주인과 주의점  (0) 2022.05.14
JPA 엔티티 매핑  (0) 2022.05.11
HelloJPA와 영속성 관리 - 내부 동작 방식  (0) 2022.05.10
JPA에 대해..  (0) 2022.05.09

댓글