일대다 단방향 관계 매핑
- 단점 : 매핑한 객체가 관리하는 외래 키가 다른 테이블에 있다 ( → 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 |