연관관계 매핑 기초
객체지향 설계의 목표는 자율적인 객체들의
협력 공동체를 만드는 것이다.
- 조영호(객체지향의 사실과 오해)
( 책 추천 : 객체지향의 사실과 오해, 오브젝트 )
객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다.
따라서 객체 연관관계를 사용한 객체 지향 모델링을 해야한다.
단방향 연관관계는 -> 간단하고 어렵지 않다.
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 기본편을 듣고 작성한 글입니다.
자바 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 |
댓글