GW LABS

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

Book-Review/Programing

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

GeonWoo Kim 2022. 8. 17. 16:14

JPA를 통한 전체적인 작업 FLOW

  • 엔티티 설계/작성
  • 테스트 코드 작성 (아마도 서비스 레이어)
    • 기능 확인
    • 쿼리 확인
  • 기능완성

 

9.1 연관관계 매핑 종류와 방향

  • One to One
  • One to Many
  • Many To One
  • Many To Many
  • 비즈니스 로직의 관점에서는 엔티티간 관계를 단방향으로 설정하고, 필요시 양방향으로 뚫는다
  • 연관관계 주인: 외래키를 갖고 있는 테이블 (상대 엔티티는 읽기 작업만 수행가능)

 

9.3 일대일 매핑

  • OneToOne: 일대일 연관관계 매핑
  • Joincolumn: 외래키 이름 설정
    • name: 매핑할 외래키의 이름을 설정
    • referencedColumnName: 외래키가 참조할 상대 테이블의 컬럼명 지정
    • foreignKey: 외래키를 생성하면서 지정할 제약조건 설정(unique, nullable, insertable, updatable)
  • mappedBy: 어떤 객체가 주인인지 표시하는 속성
    • 외래키 필드에는 ToString.Exclude 어노테이션으로 순환참조를 없애야 한다.

 

9.4 다대일, 일대다 매핑

  • ManyToOne: 다대일 연관관계 매핑
  • OneToMany: 일대다 연관관계 매핑

 

9.5 다대다 매핑

  • 실무에서 거의 사용하지 않는 구성
  • 중간 테이블로 인해 생각치 않은 쿼리들이 발생할 수 있음
  • JoinTable, JoinColumn 등으로 중간테이블을 관리할 수 있으나, 결과적으로 쿼리와 연관관계 제어를 Hibernate에 위임하는 구조기 때문에 한계가 있음
  • 결론적으로 연결 테이블을 위한 엔티티를 생성하고 관리하는 것이 좀 더 바람직한 방향이다.

 

9.6 영속성 전이

  • 영속성 전이: 엔티티의 영속성 상태를 변경할 대 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것을 의미한다.
  • 특정 상황에 맞춰 영속성 전이 타입을 설정하면 연관된 엔티티들의 동작도 함께 수행이 가능하다.
  • CascadeType
    • ALL: 모든 영속 상태 변경에 대한 영속성 전이를 적용
    • PERSIST: 엔티티가 영속화할 대 연관된 엔티티도 함께 영속화
    • MERGE: 엔티티를 영속성 컨텍스트에 병합할 때 연관된 엔티티도 병합
    • REMOVE: 엔티티를 제거할 대 연관된 엔티티도 제거
    • REFRESH: 엔티티를 새로고침할 때 연관된 엔티티도 새로고침
    • DETACH: 엔티티를 영속성 컨텍스트에서 제외하면 연관된 엔티티도 제외
  • 고아 객체: 부모 엔티티와 연관관계가 끊어진 엔티티
    • orphanRemoval 옵션으로 고아 객체를 제거할 수 있음
Comments