본문 바로가기

Spring

연관관계 매핑(2)

일대다 단방향 관계 매핑

  • 단점 : 매핑한 객체가 관리하는 외래 키가 다른 테이블에 있다 ( → insert, update SQL 모두 필요)
  • @JoinColumn 사용

→ 일대다 단방향 매핑보다는 다대일 양방향 매핑이 권장됨

 

일대일

양쪽이 하나의 관계만 가짐. 반대도 일대일 → 주 / 대상 테이블 중 아무 테이블이나 외래키를 가질 수 있음

객체 매핑에 @OneToOne 사용. 이때 외래 키에 유니크 제약조건을 추가해야 DB가 물리적으로 일대일 임을 보장 가능


1. 주 테이블에 외래 키

2. 대상 테이블에 외래 키   양방향으로 매핑해서 사용, 단방향은 지원 X

 

🛑 주 테이블 VS 대상 테이블

 

 ✔️ 주 테이블 (연관관계의 주인)

  • 외래 키(Foreign Key)를 가지고 있는 쪽
  • 즉, DB에 실제로 외래 키 컬럼이 존재하는 테이블
  • 연관관계를 관리하는 쪽, 즉 DB에 insert/update를 반영할 수 있는 쪽
  • JPA에서는 @JoinColumn이 붙은 쪽이 연관관계의 주인

 ✔️ 대상 테이블 (연관관계의 주인 아닌 쪽)

  • 외래 키를 직접 갖고 있진 않지만, 연관된 객체를 참조하는 쪽
  • mappedBy 속성으로 연관관계의 주인을 지정해줘야 함
  • DB상에서는 외래 키가 없고, 단지 객체 그래프에서만 연관된 정보를 표현

 

다대다

연결 테이블을 통해서 매핑, @ManyToMany 사용

 

단방향 or 양방향 주테이블에서 @JoinTable 사용해서 연결 테이블 바로 매핑

 

@JoinTable

  • name : 연결 테이블 지정
  • joinColumns : 현재 방향과 매핑할 조인 칼럼 정보 지정
  • inverseJoinColumns : 반대 방향과 매핑할 조인 칼럼 정보 지정

* 연결 테이블에 칼럼이 더 필요한 경우 → 1:N, N:1로 분리!!

 

복합 키

JPA 에서 복합 키를 사용하려면 별도의 식별자 클래스 필요

엔티티에 @IdClass 사용해서 식별자 클래스 지정

 

복합 키를 위한 식별자 클래스의 특징

  • 복합 키는 별도의 식별자 클래스로 만들어야 함
  • Serializable 구현 필요
  • equals와 hashCode 메소드 구현 필요
  • 기본 생성자 필요
  • 식별자 클래스는 public이어야 함
  • @IdClass 사용하는 방법 외에 @EmbeddedId 사용 가능

식별 관계 (Identifying RelationShip)

부모 테이블의 기본 키를 받아서 자신의 기본 키 + 외래 키로 사용하는 것

 

복합 키 사용 X 다대다 → 새로운 기본 키 생성 ( DB에서 생성해주는 대리 키 - Long 이용)  [ 비식별 관계 ]

 


출처

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

 

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

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

product.kyobobook.co.kr

 

'Spring' 카테고리의 다른 글

길벗 코딩 자율 학습단 2주차  (1) 2025.04.16
기본 생성자  (0) 2025.04.16
길벗 코딩 자율 학습단 1주차  (0) 2025.04.05
연관관계 매핑(1)  (0) 2025.04.05
내 첫 스프링 CRUD 만들기  (0) 2025.04.04