ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA 연관 관계 매핑
    개발 2022. 8. 2. 23:12

    연관 관계 매핑 시 고려사항

    다중성 (데이터베이스 관점의 다중성)

    • 다대일 @ManyToOne
    • 일대다 @OneToMany
    • 일대일 @OneToOne
    • 다대다 @ManyToMany

    단방향, 양방향, 테이블, 객체

    연관관계의 주인

    • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.
    • 객체의 양방향 관계는 a -> b , b -> a 처럼 참조가 2군데
    • 객체 양방향 관계는 참조가 2군데가 존재, 둘중 테이블의 외래 키 관리할 객체를 지정해야한다.

    연관관계의 주인 : 외래 키를 관리하는 참조

    주인의 반대편 : 외래 키에 영향을 주지않고 단순 조회만 가능함.

     

    다대일 관계 [N:1]

     

    항상 다수의쪽에 외래 키가 존재해야 한다 -> 아니면 잘못 설계 한것.

     

    일대다 관계 [1:N]

     

    일대다 단방향은 일대다 (1:N)에서 1이 연관관계의 주인이 되는 관계

    실무에서 거의 잘 사용 안한다고함.

    테이블 일대다 관계는 항상 N쪽에 외래키가 존재한다.

    객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리하는 특이한 구조

    @JoinColumn 사용 필수, 그렇지 않으면 Join Table 방식을 사용하게 된다(중간에 Join을 위한 테이블 생성)

     

    Entity가 관리하는 외래 키가 다른 테이블에 존재한다는 큰 단점 존재

    연관관계 관리를 위해 추가로 Update 수행

    -> 일대다 단방향 매핑을 쓰기 보단 다대일 양방향 매핑을 사용해라 (객체지향적 관점에서 손해일 수도, trade off 관계)

     

    일대일 관계 [1:1]

    주 테이블이나 대상 테이블 중에 외래 키 선택 가능

    • 주 테이블에 외래키
    • 대상 테이블에 외래키

    외래 키에 데이터베이스 유니크 제약 조건 추가한다.

     

    일대일 관계 정리

    주 테이블에 외래키

    주 객체가 대상 객체의 참조를 갖는것 처럼 주 테이블에 외래키를 두고 대상 테이블을 찾는다 <- 객체지향적으로 개발, JPA 매핑 편리

    장점으로 주 테이블만 조회 해도 대상 테이블에 데이터가 있는지 확인 가능 하나 단점으론 값이 없으면 외래키에 null 값 허용하게 됨

    대상 테이블에 외래키

    대상 테이블에 외래키가 존재, 전통적으로 데이터베이스 개발자가 선호하는 방식

    장점으로 테이블과 대상 테이블을 일대일에서 일대다로 변경할 테이블 구조가 유지되지만 단점으로 프록시 기능의 한계로 인해 지연 로딩으로 설정해도 항상 즉시로딩 된다.

    '개발' 카테고리의 다른 글

    Gradle 기본 정리  (0) 2022.12.21
    Effective Java Study - 1  (1) 2022.09.08
    Index (2)  (0) 2022.07.05
    Index (1)  (0) 2022.06.29
    Docker - 1  (0) 2021.06.14
Designed by Tistory.