JPA_Chap05_연관관계 매핑 기초

윤일권·2023년 4월 25일
0

JPA

목록 보기
3/11

이번 포스팅에서는 객체 관계 매핑(ORM)에서 가장 어려운 부분이 바로
객체 연관관계와 테이블 연관관계를 매핑하는 일이다.
하여 이번 장에서 객체의 참조와 테이블의 외래 키를 매핑하는 것을 포스팅하려한다.
크게 방향, 다중성, 연관관계의 주인에 대해 알아보도록하자.

단방향 연관관계

객체 연관관계

  • 단반향 관계 -> 양방향을 원할경우 서로 다른 2개의 단방향으로 형성한다.
  • 객체는 참조로 연관관계를 맺는다.
  • 객체 그래프 탐색 : 객체는 참조를 사용해서 연관관계를 탐색.
  • 객체관계매핑
    • @ManyToOne : 이름 그래도 다대일 관계라는 매핑 정보를 가진 어노테이션
    • @JoinColumn(name="TEAM_ID") : 조인 컬럼은 외래키를 매핑할 대 사용한다. 이 어노테이션은 생략할 수 있다.

테이블 연관관계

  • 양방향 관계
  • 테이블은 외래 키로 연관관계를 맺는다.

연관관계 사용

저장

  • JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야한다.
  • persist() 사용.

조회

  • 객체 그래프 탐색
  • 객체 지향 쿼리 사용

수정

  • update() 사용.

삭제

  • 예시 : member1.setTeam(null)
  • 위처럼 null값을 넣어 기존 값을 삭제해준다.
  • 연관된 엔티티 삭제는 remove()사용

양방향 연관관계

객체 연관관계

  • 일대다 관계는 여러 건과 연관관계를 맺을 수 있으므로 컬렉션을 사용한다.

테이블 연관관계

  • 데이터베이스 테이블은 외래 키 하나로 양방향을 조회한다.

연관관계의 주인

  • 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리한다. 때문에, 엔티티를 단방향으로 매핑하면 참조를 하나만 사용하므로 이 참조로 외래키를 관리하면 된다.
    하지만, 엔티티를 양방향으로 하면 두곳에서 서로를 참조한다. 따라서 객체의 연관관계를 관리하는 포인트 2곳으로 늘어난다.
  • 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래키는 하나다.

위 두가지 케이스가 차이가 발생한다. 그렇다면 어떻게 외래키를 관리해야할까?
-> JPA에서는 두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리해야 하는데 이것을 연관관계의 주인 이라 한다.

양방향 매핑의 규칙 : 연관관계의 주인

  • 연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래 키를 관리할 수 있다.
    반면에, 주인이 아닌 쪽은 읽기만 할 수 있다.
  • 연관관계의 주인을 정한다는 것은 사실 외래 키 관리자를 선택하는 것.

양방향 연관관계 주의점

  • 객체 관점에서 양쪽 방향에 모두 값을 입력해주는 것이 안전.
profile
생각하는 개발자가 되겠습니다!!

0개의 댓글