개발자꿈나무
다양한 연관관계 - 다대일, 일대다 본문
★ 다대일 단방향 [N:1]
- Member.team으로 팀 엔티티를 참조할 수 있지만 반대로 Team.member는 할 수 없는 관계
- 가장 많이 사용하는 연관관계!!
★ 다대일 양방향 [N:1, 1:N]
- 회원과 팀 양쪽 방향에서 서로를 참조할 수 있는 관계
- 양방향은 외래 키가 있는 쪽이 연관관계의 주인
- 양방향 연관관계는 항상 서로를 참조하도록 개발 (무한루프에 빠지지 않도록 주의!)
★ 일대다 단방향 [1:N]
- 하나의 팀은 여러 회원을 참조하지만 회원은 팀을 참조하지 않는 관계
- 이는 좀 특이한 관계인데 팀 엔티티의 Team.members로 회원 테이블의 TEAM_ID 외래 키를 관리
- 일대다 단방향 관계를 매핑할 때는 @JoinColumn을 꼭 명시해야 한다. 그렇지 않으면 JoinTable을 사용해서 새로운 테이블이 생성된다.
⭐︎ 일대다 단방향 매핑의 단점
- 매핑한 객체가 관리하는 외래 키가 다른 테이블에 존재하기 때문에 실행을 해보면 insert Member, insert Team 쿼리를 실행한 후 Update Member를 한 번 더 실행해야 Member 테이블 안에 존재하는 TEAM_ID에 값을 저장할 수 있다.
- 이는 성능 문제뿐만 아니라 관리도 부담스러우므로 일대다 단방향 매핑 대신에 다대일 양방향 매핑을 사용하는 것이 적절하다.
★ 일대다 양방향 [1:N, N:1]
- 일대다 양방향 매핑은 존재하지 않으나 꼭 일대다 양방향 매핑을 해야만 한다면 일대다 양방향처럼 보이도록 설정할 수 있다.
- 일대다 단방향 매핑 반대편에 같은 외래 키를 사용하는 다대일 단방향 매핑을 읽기 전용으로 하나 추가하는 것이다.
- 일대다 단반향 매핑 반대편에 다대일 단방향 매핑을 추가하고, insertable과 updatable 설정을 추가하지 않으면 같은 외래 키를 관리하는 필드가 2개이므로 꼭 읽기만 가능하도록 설정해줘야 한다.
- 이 방법은 정확히 말하면 일대다 양방향 매핑이 아니라 다대일 단방향 매핑을 읽기 전용으로 추가해서 일대다 양방향 매핑처럼 보이도록 설정한 것이므로 일대다 단방향 매핑이 가지는 단점을 그대로 가진다.
따라서, 다대일 양방향 매핑을 사용하는 것이 적절할 수 있다.
'자바 > JPA' 카테고리의 다른 글
다양한 연관관계 - 다대다 (0) | 2023.08.17 |
---|---|
다양한 연관관계 - 일대일 (0) | 2023.08.16 |
실전 예제 - 연관관계 매핑 시작 (0) | 2023.08.16 |
양방향 매핑관계 - 주의, 정리 (0) | 2023.08.16 |
양방향 연관관계와 주인 - 기본개념 (0) | 2023.08.15 |