-
Spring JPA(4) 연관관계 매핑Spring 2020. 1. 30. 17:44
참고 : https://dotheright.tistory.com/267?category=777106
https://victorydntmd.tistory.com/208
연관관계 매핑
객체의 참조와 테이블의 외래키 매핑을 의미한다.
JPA에서는 JDBC( Mybatis ) 를 사용했을 때와 달리 연관 관계에 있는 상대 테이블의 PK를 멤버변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조한다.
1. 방향
단방향 관계 : 두 엔티티가 관계를 맺을 때, 한 쪽의 엔티티만 참조하고 있는 것을 의미한다.
양방향 관계 : 두 엔티티가 관계를 맺을 때, 양 쪽이 서로 참조하고 있는 것을 의미한다.
관계가 있는 엔티티는 다음 중 하나의 관계를 가지게 된다.
Many To One - ( N : 1 ) 다대일
One To Many - ( 1 : N ) 일대다
One to One - ( 1: 1 ) 일대일
Many to Many - ( N : N ) 다대다
어떤 엔티티의 관점으로 보는것의 따라 다중성이 달라진다.
→ 예로 구기종목에는 축구및 여러가지의 스포츠가 포함되어 있다. 구기종목 입장에서는 축구와 일대다 관계이지만,
축구 입장에서는 구기종목과 다대일 관계가 된다.
2. 단방향 연관관계
2. (1) 단방향 매핑
→ 데이터 모델링에서는 관계를 맺어주기만 하면 자동으로 양방향 관계가 되어 서로 참조하는 반면 객체지향 모델링에서는
자신이 원하는 구현방식의 서비스를 사용이 가능하다.
→ 굳이 양방향 매핑을 사용할 필요는 없다. ( 단방향 매핑만으로도 이미 연관관계 매핑은 완료된 것이기 때문이다. )
3. 양방향 연관관계
FK로 엮인 DB 테이블 끼리는 JOIN을 통하여 서로의 데이터를 쉽게 조회가 가능하지만 Entity가 테이블처럼 동작하기 위해서는 별도의 작업이 필요하다. ( 객체는 가급적 단방향 매핑을 사용하는것이 좋다. )
mappedBy는 연관관계의 주인을 설정하는 용도로 사용이 된다. ( 연관관계 주인만이 외래키를 관리한다. )
주인은 mappedBy를 사용하지 않으며 주인은 외래키가 있는 곳으로 지정하는 것이 좋다.
주인이 아닌쪽은 mappedBy를 사용하며 주인이 누구인지 지정을 해주어야 한다.
N : 1 관계에서는 N쪽이 연관관계의 주인이 된다.
3. (1) 양방향 매핑 주의상황
→ 연관관계의 주인만이 외래 키의 값을 변경할 수 있다. ( 순수한 객체 관계를 고려한 경우 양쪽 모두에 값을 넣어주는게 안전하다. )
→ 양방향 매핑 무한루프
- toString(), lombok : 자동완성이 아닌 필요에 의해 직접 만들어 사용하기
- JSON 생성 라이브러리 : 컨트롤러에서 엔티티를 반환하면 안된다.
→ 연관관계 편의 메소드 활용
- 연관관계 주인에 연관관계 주인이 아닌 것을 넣을 때 주인이 아닌 곳에 add()를 이용하면 된다.
주인 : Member 에 Team, 주인아님 : Team ( Member.getTeam().add(Team) )
'Spring' 카테고리의 다른 글
Spring JPA(5) 게시판 (0) 2020.02.18 Spring Boot HikariCP (0) 2020.02.04 Spring JPA(3) CRUD 기본 예제 (0) 2020.01.30 Spring JPA(2) - 엔티티 매핑 (0) 2020.01.29 Spring JPA(1) ORM, Hibernate(JPA), 영속성 (0) 2020.01.22