다대다 연관관계
일단 그냥 쓰면 안된다 ㅋㅋ
사실, 객체끼리는 컬렉션으로 다대다를 구현할 수 있지만, 물리 DB는 다대다를 두개의 테이블로 해소할 수 없다.
이전에도 언급했듯이, 다대다 관계는 반드시 일대다 + 다대일 관계로 풀어내야한다.
사용하는 방법은 @ManyToMany + @JoinTable 연결 테이블을 지정하여 사용할 수 있다.
객체 두개로 해결할 수 있으니 상당히 편해보이지만, 사실 사용하면 안되는 관계이다.
연결 테이블은 단순히 연결만 하고 끝나지 않고, 추가로 수량과 같은 필드가 추가될 수 있다. 그리고 추가적으로 예상하지 못한 쿼리가 나갈 수도 있다.
다대다 극복방법
연결 테이블용 엔티티 추가 -> 중간테이블을 엔티티로 승격한다.
Order라는 중간 테이블을 만들어 MemberProduct와 매핑하여 중간테이블을 사용하는 방법으로 해소해야한다. -> @OneToMany + @ManyToOne
즉, 다대다 관계가 일대다 + 다대일 관계로 해소가 되었다.