본문 바로가기

Spring

연관관계 매핑(1)

관계 맺기

  • 객체 : 참조(주소)를 사용
  • 테이블 : 외래키(FK)를 사용

' 객체의 참조와 테이블의 외래 키를 매핑 '

 

keyword

●  방향

      단방향 (한 쪽만 참조)/ 양방향 (서로 참조) || 테이블 관계는 항상 양방향

●  다중성

      다대일 / 일대다 / 일대일 / 다대다

●  연관관계의 주인

       객체를 양방향 연관관계로 만들 경우 주인 명확히 해야함


단방향 연관관계  (1 : N)

 

@ManyToOne   - 다중성을 나타내는 어노테이션

@JoinColumn(name="매핑할 외래 키 이름") - 외래 키를 매핑하는 것

→ 이것은 1:N의 N에 해당하는 entity에 작성 !!

 

JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 함

 

연관관계가 있는 엔티티를 조회하는 방법

  • 객체 그래프 탐색  -  객체를 통해 연관된 엔티티 조회
  • 객체지향 쿼리 사용 (JPQL)  

 

양방향 연관관계


양방향 연관관계는 결국 단방향 연관관계 * 2 인 것임

원래 N이었던 부분은 변경 X , 1이었던 부분에

 @OneToMany(mappedBy = "반대쪽 매핑의 필드 이름")

 

두 연관관계 중 하나를 연관관계 주인으로 정함

→ 연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래 키를 관리(등록, 수정, 삭제)할 수 있음

    ( 아닌 쪽은 읽기만 가능)

 

  • 주인은 mappedBy 속성을 사용하지 않음
  • 주인이 아니면 mappedBy 속성을 사용해서 속성의 값으로 연관관계의 주인 지정

연관관계의 주인은 테이블에 외래 키가 있는 곳

 

  • 단방향 매핑만으로 테이블과 객체의 연관관계 매핑은 이미 완료됨
  • 단방향을 양방향으로 만들면 반대방향으로 객체 그래프 탐색 기능이 추가됨
  • 양방향 연관관계를 매핑하려면 객체에서 양쪽 방향 모두 관리 필요

 

** 데이터베이스 테이블의 다대일, 일대다 관계에서는 항상 다 쪽이 외래 키를 가짐 **

연관관계의 주인이 외래 키를 관리하므로 주인이 아닌 방향은 값을 설정하지 않아도 데이터베이스에 외래 키 값이 정상 입력됨

 

하지만! 순수한 객체 상태에서도 동작하게 하기 위해서는 양쪽 모두 연관관계를 맺어주는 것이 맞다

JPA 사용하지 않으면 오류가 날 수 있다. 양쪽 다 신경쓰자.!!

→ 이렇게 한 번에 양방향 관계를 설정하는 메소드 = 연관관계 편의 메소드

 

** 이때 양쪽에 연관관계 편의 메소드를 모두 작성하면 무한루프에 빠지므로 주의 필요 **


출처

https://product.kyobobook.co.kr/detail/S000000935744

 

자바 ORM 표준 JPA 프로그래밍 | 김영한 - 교보문고

자바 ORM 표준 JPA 프로그래밍 | 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA

product.kyobobook.co.kr

 

 

'Spring' 카테고리의 다른 글

연관관계 매핑(2)  (1) 2025.04.13
길벗 코딩 자율 학습단 1주차  (0) 2025.04.05
내 첫 스프링 CRUD 만들기  (0) 2025.04.04
이펍 세미나(1)  (0) 2025.04.01
엔티티 매핑  (0) 2025.03.30