관계 맺기
- 객체 : 참조(주소)를 사용
- 테이블 : 외래키(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 |