1. JPA 기반의 엔티티 간 연관 관계를 매핑할 수 있다.
- JPA 기반 엔티티 간 연관 관계 매핑
✔︎ 엔티티 클래스 간의 관계를 만들어주는 것
✔︎ Spring Data JDBC
✔︎ JPA
✔︎ 한쪽 클래스만 다른 쪽 클래스의 참조 정보를 가지고 있는 관계
✔︎ 예시
✔︎ 양쪽 클래스가 서로의 참조 정보를 가지고 있는 관계
✔︎ 예시
✔︎ 일대다 관계 : 일(1)에 해당하는 클래스가 다(N)에 해당하는 객체를 참조할 수 있는 관계
✔︎ 예시
<클래스 간 관계>
<테이블 간 관계>
✔︎ 일대다 관계는 외래키를 가지고 있어야 할 엔티티에 외래키 역할을 하는 객체 참조가 없기 때문에 가급적 사용 ❌
✔︎ 다대일 단방향 매핑을 먼저 한 후에 필요한 경우, 일대다 단방향 매핑을 추가해서 양방향 연관 관계를 만드는 것이 일반적
✔︎ 다(N)에 해당하는 클래스가 일(1)에 해당하는 객체를 참조할 수 있는 관계
✔︎ 예시
✔︎ 테이블이 외래키를 가지듯 클래스 역시 Member 객체를 외래키처럼 가지고 있음
✔︎ 테이블의 관계처럼 자연스러운 매핑 방식이기 때문에 JPA의 엔티티 연관 관계 중에서 가장 기본으로 사용되는 매핑 방식
✔︎ 다대일 단방향 연관 관계 매핑 코드 작성 시
@JoinColumn
애너테이션은 다대일 매핑(@ManyToOne
)에서 사용@JoinColumn
애너테이션의 name
애트리뷰트 값에는 테이블 조인 시 사용되는 외래키가 저장되는 컬럼명을 지정✔︎ 일대다 단방향 연관 관계를 추가하여 양방향 매핑 시
@OneToMany
의 mappedBy 애트리뷰트의 값으로 외래키 역할을 하는 객체의 필드이름을 지정mappedBy
의 값으로 무얼 지정해야할 지 모르겠다면⁉️ 🚨✔︎ 중간에 테이블 하나를 추가해서 두 개의 일대다 관계를 만들어주는 것이 일반적 방법
✔︎ 예시
✔︎ 일대다 단방향 매핑은 외래키를 포함하지 않기 때문에, 두 개의 다대일 단방향 매핑 적용
✔︎ 다대일 매핑을 통해 객체 그래프 탐색으로 원하는 객체를 조회할 수 없을 때 일대다 양방향 매핑 적용
🚨 객체 그래프 탐색
findOrder.getMember().getMemberId()
✔︎ 다대일 단방향 연관 관계 매핑과 동일
✔︎ @ManyToOne
애너테이션이 아닌 @OneToOne
애너테이션을 사용한다는 차이
✔︎ 양방향 매핑을 추가하는 법도 동일
✔︎ 일대다 매핑 사용 ❌
✔︎ 제일 먼저 다대일 단방향 매핑부터 적용
✔︎ 다대일 단방향 매핑을 통해 객체 그래프 탐색으로 조회할 수 없는 정보가 있는 경우, 비로소 양방향 매핑 적용
☞ JPA 기반 엔티티 간 연관 관계를 매핑하는 법에 대해 공부했다. 항상 일대다가 입에 붙었는데 JPA에서는 다대일이 기본이라고 한다. 다대다와 일대일 관련해서는 따로 학습 내용에서보다 실습 과제에서 연습할 수 있었다. mappedBy에 어떤 값을 집어 넣어야하는지, JpaTest를 구현할 때 나 스스로 영속성 컨텍스트에 넣고 테이블에 저장시켜 원하는 값을 조회할 수 있는지 아직 많이 헷갈리고 어려운 게 사실이다. 내가 직접 생각해낸 내용을 코드로 구현하는 연습을 더 해보기로 했다. 하루하루 발전해나가는 사람이 되자.
・ Spring Data JPA을 통한 데이터 액세스 계층 구현