자바 ORM 표준 JPA 프로그래밍 6장 정리

wannabeking·2022년 8월 28일
0

JPA

목록 보기
3/7

일대다, 일대일

  • 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용해야 함
    • 외래키 관리를 '다'쪽이 하는 것이 좋음
    • 다른 테이블의 외래키를 관리하는 것이 성능, 관리 이슈가 있기 때문
  • 일대일 관계에서는 어느쪽이든 외래키를 가질 수 있음
    • 주 테이블에 외래 키를 두면 주 객체가 대상 객체를 참조하는 것처럼 객체지향적으로 사용 가능
    • 대상 테이블에 외래 키를 두면 전통적인 데이터베이스와 같음


다대다

  • 관계형 데이터베이스는 정규화된 테이블로 다대다 관계를 표현할 수 없기 때문에 중계 테이블을 사용해서 풀어냄
  • 객체는 테이블과 다르게 객체 2개로 다대다 관계를 만들 수 있음
    • @ManyToMany를 사용해서 매핑
    • @JoinTable -> name : 연결 테이블 이름 지정, joinColumns : 현재 방향 매핑할 조인 컬럼 정보 지정, inverseJoinColumns : 반대 방향 조인 컬럼 정보 지정
    • getter로 대상 탐색하면 이너 조인 쿼리 날라감
    • 양방향은 대상 엔터티에 mappedBy 추가하자
  • 객체 2개로 다대다 관계를 만드는 방법은 단순하고 편리하지만 실무에서 사용하기엔 한계가 있음, 중계 테이블에도 FK를 제외한 컬럼들이 필요할 수 있기 때문, 복합키 엔터티로 다대다 관계 만들 수 있음
    • 중계 엔터티를 직접 만들어 사용, 별도의 식별자 클래스 만들어야함
    • @IdClass 어노테이션을 사용하여 다중 컬럼(이어줄 두 FK)을 기본 키로 생성
    • 복합키는 Serializable, equlas, hashCode를 구현해야 함, 기본 생성자 있어야 함, public이어야 함
    • @IdClass 사용하는 방법 외 @EmbeddedId 사용하는 방법도 있음
    • 이렇게 부모 테이블의 기본 키를 받아서 자신의 기본키 + 외래 키로 사용하는 것을 식별 관계라 함
    • ORM 매핑에서 처리할 일이 많아지고 복잡함
  • 다대다를 새로운 기본키 사용해서 구현하는 방법
    • 자신만의 PK를 가지고 연결할 두 엔터티의 FK를 가지는 중계 엔터티를 사용하는 방법
    • 앞선 복합 키 방법에 비해 식별자 클래스를 사용하지 않아서 복잡하지 않음


profile
내일은 개발왕 😎

0개의 댓글