JPA @ManyToMany 지양 이유
JPA @ManyToMany 지양 이유
JPA @ManyToMany
- DB에서는 1:1, 1:N, N:1, N:M 등의 관계가 존재
- 관계형 데이터베이스의 정규화된 테이블 2개로는 N:M 관계를 표현 불가능
- 데이터베이스에서 표현하기 위해서는 두 테이블 각각과 N:1 관계를 가지는 중간 테이블을 만들어야 함
- JPA에서는
@ManyToMany
어노테이션을 통해 N:M 관계를 논리적으로 지원- 편리해 보이지만, 실무에서는 사용이 지양됨
- 실제 구현에서는 중간에 매핑을 위한 테이블이 숨겨져서 생성되기 때문
- 이 테이블은 매핑 정보 외의 추가 정보를 담지 못하기 때문에 기능이 제한됨
- 또한 숨겨져 있기 때문에 예상하지 못한 쿼리가 많이 나갈 수도 있음
@ManyToMany
를 사용하지 않고, 중간 테이블을 직접 엔티티로 만들어 주면 됨- 중간 테이블에서
FK
두개를 가지고, 두 개의 테이블들과 N:1 관계를 가지면 됨 - 매핑 정보 외의 추가 정보도 넣을 수 있음
References
- https://ict-nroo.tistory.com/127
- https://jogeum.net/7