본문 바로가기
개발하자/🍃 SpringBoot

[자바 ORM 표준 JPA 프로그래밍 - 기본편] 05. 연관관계 매핑 기초

by 밈밈무 2022. 10. 9.

연관관계가 필요한 이유

  • 테이블 : 외래키로 조인하여 연관된 테이블 찾음
  • 객체 : 참조를 사용해서 연관된 객체를 찾음

⇒ 외래키 ≠ 참조 : 패러다임의 차이가 있기 때문에 협력관계를 만들기 위해서는 연관관계 매핑이 필요하다.

단방향 연관관계

  • 객체 지향 모델링
    • @ManyToOne@JoinColumn(name = "매핑할 테이블의 외래키 이름") 으로 객체의 참조와 테이블의 외래키를 매핑한다.

양방향 연관관계와 연관관계의 주인

양방향 매핑

  • 양쪽 참조 가능
  • N측에는 단방향 연관관계 설정과 마찬가지로 설정해준다.
  • 1측에는 @OneToMany(mappedBy = "~") 와 함께 컬렉션을 추가해준다.

연관관계의 주인과 mappedBy

  • 객체와 테이블의 관계를 맺는 차이

    • 객체 연관관계 : 단방향 연관관계 2개 = 양방향 매핑

      • 회원 → 팀 1개(단방향)

      • 팀 → 회원 1개(단방향)

        ⇒ 이 두개가 합쳐져서 양방향 매핑처럼 보이게 한다.

    • 테이블 연관관계 : 연관관계 1개

      • fk 하나로 회원 ↔ 팀의 연관관계 1개(양방향)
      • 외래키 하나로 두 테이블의 연관관계를 관리한다.
  • 연관관계의 주인(Owner)

    • 양방향 매핑 시, 둘 중 하나로 외래키를 관리해야 한다. 예를 들어 Member가 다른 팀을 들어가고 싶으면 어떤 값으로 외래키를 관리해야 할지 애매해진다!
    • 연관관계 주인만이 외래키를 관리 = 변경(등록, 수정)할 수 있다
    • 주인이 아닌 쪽은 읽기만 가능하다
    • 주인이 아닌 쪽은 mappedBy 속성으로 주인을 지정해준다.
    • 주인은 외래키가 있는 N측을 주인으로 지정한다.