자바 ORM 표준 JPA 프로그래밍 기본편 - 5. 연관관계 매핑 기초
Updated:
김영한님의 인프런 강의 - 자바 ORM 표준 JPA 프로그래밍 - 기본편
위 강의를 정리한 내용입니다.
I. 단방향 연관관계
- 연관관계 매핑을 통하여 DB를 객체처럼 사용할 수 있게 해준다.
- 기존에는 객체를 가져오는 과정 -> 객체의 외래키를 구하는 과정 -> 외래키로 객체를 가져오는 과정
- 연관관계 매핑 이후에는 객체를 가져오는 과정 -> 객체에서 객체를 꺼내오는 과정
@ManyToOne
등의 어노테이션으로 매핑해준다.
II. 양방향 연관관계와 연관관계의 주인
- 테이블 연관관계에 있어서 하나의 외래키로 양 테이블을 모두 연결할 수 있다. (양쪽에 하나씩 있을 필요가 없다)
객체와 테이블이 관계를 맺는 차이
- 객체
- A->B, B->A 단방향 연관관계 2개
- 테이블
- A<->B 양방향 연관관계 1개
연관관계의 주인(Owner)
- 양방향 매핑 규칙
- 둘중 하나만 연관관계의 주인
- 주인만 외래키 관리(등록, 수정)
- 주인이 아닌쪽은 읽기만 가능(값을 넣어도 DB에 적용되지 않음)
- 주인이 아닌쪽만 mappedBy로 주인 지정
- N:1의 관계라면 N이 외래키를 갖는다.
주의점
- 연관관계의 주인이 아닌쪽에 값을 추가해도 DB에 적용되지 않는다.
- 그럼에도 양쪽 다 값을 입력해 주는 것이 맞다.
- 객체지향적인 관점에서 바라보기 위해서
- 커밋하기 전까지는 1차캐시에만 올라가있는 상태인데, 1차캐시상에서는 아직 연관관계를 자동으로 연결해주지 않았기 때문에 값을 넣지 않은 쪽은 빈 값을 얻을 수 밖에 없다.
- 실수를 막기 위해 주인의
setter
메소드에 양쪽 값 입력을 모두 넣어주자.
정리
- 가능하다면 단반향 매핑만으로 매핑을 끝내야 함
- 양방향은 단방향에서
Entity
에 코드를 조금 추가하면 언제든지 구현할 수 있다.
Leave a comment