자바 ORM 표준 JPA 프로그래밍(인프런)

Ch05. 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인(주의점)

webmaster 2021. 12. 12. 12:46
728x90

양방향 매핑 시 가장 많이 하는 실수

양방향 연관관계에서 가장 많이 하는 실수로 연관관계의 주인에만 값을 넣어준다.

  • 연관관계의 주인에만 값을 넣기만 하면 되지만 결국에는 양쪽에 값을 넣어주는 것이 맞다.
  • WHY? 2가지 문제가 있다.
    • 1차 Cash에서 값을 가지고 왔을 때의 문제
    • Test 케이스 작성할 때 : JPA 없지 순수 Java 코드로 테스트를 해야 되는데 값이 서로 다르게 나오는 문제가 있다.

양쪽의 값 세팅 시 주의

연관관계편의 메서드

  • 순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자
  • 연관관계 편의 메서드를 생성하자
  • changeTeam의 메서드에서 양쪽 관계의 값을 넣어준다.
  • setTeam 같은 경우 java에서 관례로 사용하는 곳이 많기 때문에 새로운 메서드를 만들어서 하는것을 추천
  • 연관관계 편의 메서드한쪽에만 만들자
  • 양방향 매핑 시에 무한 루프를 조심하자
    • Ex) toString(), lombok, JSON 생성 라이브러리

Member의 ToString()

Member의 ToString()

Team의 ToString()

Team의 ToString()

  • Lombok과 같은 라이브러리를 사용하면 자동으로 만들어 준다.
  • Team - Member는 서로 순환 참조가 되고 있다.
  • 따라서, toString()을 호출하게 되면 순환 참조로 인해 무한루프가 걸려 장애가 발생한다.

양방향 매핑 정리

  • 단방향 매핑만으로도 이미 연관관계 매핑은 완료
  • 양방향 매핑은 반대 방향으로 조회(객체 그래프 탐색) 기능이 추가된 것 뿐 
  • JPQL에서 역방향으로 탐색할 일이 많음 
  • 단방향 매핑을 잘하고 양방향은 필요할 때 추가해도 됨 (테이블에 영향을 주지 않음)

연관관계의 주인을 정하는 기준

  • 비즈니스 로직을 기준으로 연관관계의 주인을 선택하면 안됨
  • 연관관계의 주인은 외래 키의 위치를 기준으로 정해야 함
728x90