본문 바로가기
IT 이야기/Java

[JPA] Entity의 N:M 관계를 개발하면서 느낀 것

by Dblog 2021. 8. 10.
728x90

https://techblog.woowahan.com/2595/

 

Legacy DB의 JPA Entity Mapping (복합키 매핑 편) | 우아한형제들 기술블로그

{{item.name}} 안녕하세요. 우아한형제들에서 배달의민족 서비스의 광고시스템을 개발하고 있습니다. 시스템을 점진적으로 Spring Boot / JPA 기반으로 이관하면서 경험했던 내용을 공유하고자 합니다.

techblog.woowahan.com

 

사이드 프로젝트를 하면서 다대다 관계에 많은 고민을 하게 되었는데 구글에 검색해보니 많은 분들이 JPA에서 다대다 관계 즉, M:N관계를 설정할때 많은 고민을 하는 것 같습니다.


결론부터 말하자면 M:N, 다대다 관계는 중간에 엔티티를 하나 두는 방식을 사용하는 것을 권장하고 있습니다. 

 

개발자들 사이에 다대다 관계를 설정할 때 JPA @Manytomany 기능을 사용하지 않는것은 국룰로 자리잡고 있는것 같습니다. 

그건 @Manytomany의 특성 때문에 그렇습니다. 개발자가 예상하지 못하는 쿼리들이 생각보다 많이 나가고 그 때문에 성능이 많이 떨어집니다. 

https://dingue.tistory.com/25

 

JPA, Hibernate 연관관계 정리

@ManyToOne 가장 흔한 어노테이션으로 관계형 데이터베이스가 관계를 맺는 방식과 유사합니다. ex) @ManyToOne 연관관계가 설정이 되면, 하이버네이트가 데이터베이스 외래키를 설정하게 됩니다. @OneTo

dingue.tistory.com

이분 블로그에 은근 잘 정리되어 있는데 요약해보면 cascade옵션 때문에 삭제되는 데이터와 연관된 모든 데이터를 일단 지우고 필요한 데이터는 다시 insert 하는 구조로 진행됩니다. 

굳이굳이 다 지워놓고 1,3을 insert 합니다.

이러한 예측할 수 없는 쿼리등의 문제로 manytomany는 활용을 지양하는 편입니다. 

 

 

728x90

댓글