기록하는 습관

Spring - JPA (1) 연관관계 본문

개발/Spring

Spring - JPA (1) 연관관계

로그뉴 2022. 7. 12. 13:37

연관 관계 정의 규칙

  • 방향 : 단방향, 양방향 (객체 참조)
  • 연관 관계의 주인 : 양방향일 때, 연관 관계에서 관리 주체
  • 다중성 : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)

 

단방향, 양방향

  • 데이터베이스: 외래 키 하나로 양 쪽 테이블 조인이 가능
  • 객체: 참조용 필드가 있는 객체만 다른 객체를 참조하는 것이 가능

그렇기 때문에 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 참조하면 단방향 관계, 두 객체 모두가 각각 참조용 필드를 갖고 참조하면 양방향 관계라고 한다.

엄밀하게는 양방향 관계는 없고 두 객체가 단방향 참조를 각각 가져서 양방향 관계처럼 사용하고 말하는 것

 

단방향, 양방향 선택?

비즈니스 로직에서 두 객체가 참조가 필요한지 여부를 고민하기.

  • GroupCondition.getGroup()처럼 참조가 필요하면 GroupCondition→Group 단방향참조
    • 만약 참조가 굳이 필요없으면 참조를 안하면 됨
  • Group.getGroupCondition()처럼 참조가 필요하면 Group→GroupCondition 단방향참조
    • 만약 참조가 굳이 필요없으면 참조를 안하면 됨

이렇게 비즈니스 로직에 맞게 선택했는데 두 객체가 서로 단방향 참조를 했다면 양방향 연관 관계가 되는 것임.

 

참고)

무조건 양방향 설정을 하게 되면, 불필요한 연관관계 매핑으로 인해 복잡성이 증가한다. 

따라서, 기본적으로 단방향 매핑 후 나중에 필요시 역방향으로 추가하는 것이 좋다.

 

양방향일 경우, 연관관계의 주인은?

연관 관계의 주인을 지정 하는 것은 두 단방향 관계(A→B, B→A)중, 제어의 권한(외래 키를 비롯한 테이블 레코드를 저장, 수정, 삭제 처리)을 갖는 실질적인 관계가 어떤 것인지 JPA에게 알려주는 것.

  • 연관 관계의 주인: 연관 관계를 갖는 두 객체 사이에서 조회, 저장, 수정, 삭제 가능
  • 연관 관계의 피주인: 조회만 가능.

 

연관관계 주인 정하는 법: 외래 키가 있는 곳!

Comments