JAVA & SPRING/JPA

JPA0 기본편(다양한 연관관계 매핑2, 일대일 & 다대다)

눈오는1월 2024. 3. 13. 16:41
728x90

본 내용은 인프런 김영한 강사님 JPA 기본 편 강의를 듣고 정리한 내용입니다.

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런

JPA 를 공부하고 책을 보며 어려웠던 내용을 위주로 먼저 보았습니다. 옆에서 1:1 과외해주는 것 같이 생생하고 이해 잘되는 설명, 예제(코드)가 너무 좋았습니다. 어느 것 하나 애매함없이 모두

www.inflearn.com

 

연관관계 매핑 시 다중성을 고려해야 하는데 이번에는 일대일 & 다대다를 정리해 볼 예정이다.

 

일대일

일대일 관계 같은 경우 주 테이블이나 대상 테이블 중에 외래키를 두고 싶은 테이블은 선택이 가능하다.

DB 입장에서는 외래 키에 데이터베이스 유니크 제약조건을 추가해야 한다. ( 안 해도 되긴 하지만 그럼 관리를 엄청 잘해야 한다)

 

일대일 단방향

-> 다대일 단방향 매핑과 매우 유사

주 테잉블 일대일 단방향

코드로 살펴보자!

Member 엔티티
Locker 엔티티

위에서 언급했던 것처럼 다대일과 매우 유사하다(어노테이션만 OneToOne이다)

위 코드처럼 Locker 엔티티에 mappedBy를 할 경우 양방향이 된다.

 

대상 테이블에 외래키 단방향일 경우 즉, Locker에 외래키가 있고, Member에서 윌키를 관리할 경우(일대다 관계처럼) 어떻게 될까?

-> JPA에서 지원 자체가 안된다.

 

 

다대다

본론부터 말하자면 다대다는 쓰면 안된다.

관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수가 없다. 그래서 연결할 테이블 하나를 추가해서 다대일 관계로 풀어나가야 된다.

객체관점에서는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다. -> 가능은하지만 실무에서는 안쓸 예정

실무에서 안 쓰는 이유는 추가 데이터 넣는 것이 불가능하고, 중간 테이블을 통해서 조인해서 쿼리가 날아가는데 의도치 못한 쿼리가 날아갈 수도 있음

 

 

728x90