Replies: 1 comment
-
|
Q1. JPA에서 다대다(Many-to-Many) 관계는 어떻게 매핑하나요? 그리고 실무에서는 어떻게 사용하는 것이 바람직한가요? ✅ 모범 답변 그러나 @manytomany는 중간 테이블에 추가적인 컬럼을 넣을 수 없다는 제약이 있어서, 실무에서는 거의 사용하지 않습니다. 예를 들어, 학생이 수강한 강의에 대해 수강일자나 점수 같은 정보를 저장해야 하는 경우가 많은데, 이건 기본 다대다 매핑으로는 불가능합니다. 그래서 실무에서는 중간 테이블을 별도의 엔티티(예: Enrollment)로 분리해서, 각각 @manytoone 관계로 매핑하는 다대다 관계의 단방향 분해 방식을 주로 사용합니다. 이 방식은 중간 테이블에 필요한 컬럼을 자유롭게 추가할 수 있고, 엔티티 간의 관계도 더 명확하게 관리할 수 있어 유지보수 측면에서도 훨씬 유리합니다. Q2. @manytomany를 사용할 경우, 어떤 문제가 생길 수 있나요? ✅ 답변 또한, 다대다 관계는 복잡한 연관관계에 대한 JPQL이나 QueryDSL 쿼리를 작성할 때도 직관적이지 않아서, 쿼리 최적화나 성능 튜닝이 어렵습니다. 따라서 실무에서는 다대다 관계를 1:N, N:1 구조로 풀어내는 방식이 더 많이 사용됩니다. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
JPA에서 다대다(Many-to-Many) 관계는 두 개의 엔티티가 서로 다수의 인스턴스를 가질 수 있는 관계입니다. 예를 들어,
학생과강의는 대표적인 다대다 관계입니다. 한 명의 학생은 여러 강의를 수강할 수 있고, 하나의 강의도 여러 학생이 수강할 수 있기 때문입니다.✅ 1. 기본적인 다대다 매핑 방법
🔎 설명
@ManyToMany는 기본적으로 중간 테이블을 자동 생성합니다.@JoinTable을 사용하여 중간 테이블의 이름과 컬럼을 직접 지정할 수 있습니다.mappedBy는 반대쪽에서 연관관계의 주인이 아님을 의미합니다.@ManyToMany매핑은 중간 테이블에 추가 컬럼을 넣을 수 없습니다.✅ 3. 중간 테이블을 엔티티로 바꾸기
예:
Student,Course,Enrollment(중간 테이블)🔎 장점
Enrollment엔티티를 통해 중간 테이블에 원하는 데이터를 저장 가능Beta Was this translation helpful? Give feedback.
All reactions