개발 공부 기록/07. TIL

스프링 부트 핵심가이드 TIL - 7장 (연관관계매핑)

박세류 2023. 10. 10. 23:06

✍학습 키워드

연관관계매핑

RDBMS를 사용할때엔 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하기란 불가능하다. 주로 조인을 사용하는데, JPA에서도 연관관계를 표현할 수 있다.

  • One To One: 일대일(1:1)
  • One To Many: 일대다(1:N)
  • Many To One: 다대일(N:1)
  • Many To Many: 다대다(N:M) 등이 있다.

⇒ 어떤 엔티티를 중심으로 연관 엔티티를 보느냐에 따라 연관관계의 상태가 달라진다.

영속성 전이 (데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성)

  • 영속성 전이(cascade)란 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것을 의미한다.

📝새로 배운 개념

  • 단방향: 두 엔티티의 관계에서 한쪽의 엔티티만 참조하는 형식이다.
  • 양방향: 두 엔티티의 관계에서 각 엔티티가 서로의 엔티티를 참조하는 형식이다.

⇒ 연관관계가 설정되면 한 테이블에서 다른 테이블의 기본값을 외래키로 갖게 된다.

일대일매핑

상품 테이블 ↔ 상품정보 테이블의 일대일 관계처럼 하나의 상품에 하나의 상품정보만 매핑되는 구조는 일대일 관계라고 볼 수 있다. (left outer join)

  • @OneToOne 어노테이션은 다른 엔티티 객체를 필드로 정의했을 때 일대일 연관관계로 매핑하기 위해 사용된다.
  • @JoinColumn 어노테이션을 사용해 매핑할 외래키를 설정하는데, 해당 어노테이션은 기본값이 설정돼 있어 자동으로 이름을 매핑하지만 의도한 이름이 들어가지 않기 때문에 name 속성을 사용해 원하는 칼럼명을 지정하는 것이 좋다.

다대일, 일대다 매핑

  • 상품과 공급업체 관계처럼, 상품 테이블 입장에서 볼 경우에는 다대일(상품 여러개를 공급업체가 번호화), 공급업체 입장에서 볼 경우 일대다(하나의 공급업체가 여러개 상품 취급) 인 경우의 매핑

다대다 매핑

  • 실무에서 거의 사용되지 않는 구성이나, 상품과 생산업체의 예로 들자면 한 종류의 상품이 여러 생산업체를 통해 생산될 수 있고, 생산업체 한 곳이 여러 상품을 생산할 수도 있다.
    • 다대다 연관관계에선 중간테이블을 통해 연관 엔티티 값을 가져올 수 있으나, 예기치 못한 쿼리가 생길 수 있어 관리가 힘든 문제가 생길 수 있기 때문에 중간테이블을 생성하는 대신 일대다 다대일로 할 수 있는 중간 엔티티로 승격시켜 JPA에서 관리하는 것이 좋다.
728x90