자바 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