라이브러리는 도서관 아닌가요

JPA 다대다를 다대일, 일대다로 풀어야 하는 이유 본문

Java/JPA

JPA 다대다를 다대일, 일대다로 풀어야 하는 이유

veryhi 2022. 1. 19. 18:26

 

개념상 두 엔티티는 다대다로 묶일 수 있다.

 

다만 관계형 데이터베이스에서는 테이블 두 개로 다대다를 표현할 수 없다.

 

따라서 두 엔티티에 대한 테이블 관계를 일대다, 다대일 테이블 관계로 풀어내야 한다.

 

결국 두 테이블 사이에 연결 테이블이 하나 더 생겨 3개가 된다. 

 

이러한 보이지 않는 매핑과 생성을 JPA의 hibernate가 알아서 해준다.

 

 

 

그럼 왜 JPA의 다대다를 실무에서 쓰지 말라고 할까?

 

자동으로 생성되는 연결 테이블에 사실상 데이터를 추가하는 것이 불가능하기 때문이다.

 

예를 들어 이미 생성된 연결 테이블에

 

주문 시간, 주문 수량과 같은 데이터를 추가하라는 요청이 들어왔을 때 해결할 수 없다.

 

또한 두 테이블과 연결 테이블 간에 오고 가는 쿼리를 파악해야 하는 불편함까지 있다.

 

그래서 쓰지 않는다.

 

 

 

그럼 해결책은?

 

보이지 않았던 연결 테이블을 엔티티로 구현하는 것이다.

 

JPA가 자동 생성해주는 다대다 용도의 테이블에 의존하지 않게끔 한다.

 

따라서 미리 두 엔티티 간의 관계를 파악하고 설계를 한다.

 

JPA가 했듯이 다대다를 다대일, 일대다로 풀어낸다.

 

 

 

 

Comments