코드스테이츠_국비교육/[Section3]

51.01_[Spring MVC] JPA 기반 데이터 액세스 계층_Spring Data JPA 연관 관계 정리_22.11.03

생각없이 해도 생각보다 좋다. 2022. 11. 8. 22:50

>JPA 목적
: 객체 지향 프로그래밍과 데이터베이스 사이의 패러다임 불일치를 해결한다.
: JPA에서 Entity 객체와 DB 테이블을 어떻게 매핑할 지를 잘 이해하는 것이 중요한 이유

>1차원 매핑
: @Entity, @Column, @Id, @GeneratedValue, @Enumerated 등의 애너테이션으로 애너테이션을 사용한 객체와 DB를 바로 연결시키는 방식들의 매핑

>연관 관계 매핑
: Entity 객체 사이의 매핑
: DB에서 테이블이 외래키로 매핑하는 식의 관계처럼 Entity 객체 간의 매핑을 의미함.

>연관 관계 매핑 관점 포인트
-방향성 : 단반향, 양방향
-연관 관계의 주인 : 해당 연관 관계를 주도하는 객체가 누구인지, 즉 외래키를 갖고 있는 객체가 누구인지.
-다중성 : 1:1 , 1:N, N:1, N:N

>방향성
: DB 테이블에서는 외래키 하나만 있으면 관계가 이어진 양쪽 테이블을 조인할 수 있음. (자연스레 양방향 관계가 성립된다는 의미일 듯)
: Entity 객체는 다른 객체와 관계를 맺으려면 객체를 참조하는 필드를 가져야하고, 한쪽이 참조 필드를 갖는다한들 양쪽을 서로 확인할 수 없음. 필드를 갖는 쪽에서만 참조하는 객체를 확인할 수 있다.

>연관 관계의 주인 ( mappedBy )
: 양방향인 관계 사이에서 관계 주도권을 갖는 객체를 의미함.
: 즉, 연관 관계의 주인은 객체 간 조회, 저장, 수정, 삭제를 할 수 있지만 연관 관계의 주인이 아닌 객체는 타 객체를 조회만 할 수 있다.
: 연관 관계 주인을 지정하는 키워드는 `mappedBy` 키워드의 값이다.
-연관 관계의 주인 정리
1. @JoinColumn은 필수
: 객체간 관계를 만들 때 외래키를 필수로 갖는 개념으로 @JoinColumn으로 관계를 맺는다.
2. mappedBy
: mappedBy는 사실상 선택적인 옵션이다. 관계에서 양방향성 조회를 제공할 때 쓰는 키워드이다. 아 지금 관계 상황에서는 양방향으로 정보를 조회할 수 있어야 한다 라고 생각되면 사용하는 것이다.
: @JoinColumn으로 단방향 관계가 맺어진 사이에서 본인의 PK를 FK로 제공하는 객체에서 mappedBy 키워드가 사용되고 본인의 PK를 FK로 가지고 있는 객체를 조회가능한 상태로 만든다. (읽기 전용)


//추가 공부
1. DB 테이블에서 외래키 하나면 양방향처럼 사용할 수 있었나?


참고 링크
https://jeong-pro.tistory.com/231