JPA 심화 1-4

5w31892p·2023년 2월 1일
0

JPA 심화

목록 보기
4/19

Raw JPA 매핑 기능

:: @OneToOne

  • 일대일 관계를 나타내는 매핑 정보
  • 1:1 관계를 지정하기에 앞서 이것이 꼭 물리적으로 테이블이 분리되어야 하는지에 대해 생각하기
  • 1:1 관계로 구성 한다는 것은 결국 하나의 목적에 부합되는 공통된 데이터를 관리한다고 볼 수 있으며 이것은 하나의 테이블에서 관리 할 수 있는 데이타일 가능성이 높다는 의미
  • 즉, 의도적 중복이 아니라면 사용할 일이 없음
    • 의도적 중복 예시) 버블 구독상품을 사서 채팅방이 생길경우. 구독상품과 채팅방은 1:1 관계

:: @OneToMany

  • 일대다 관계를 나타내는 매핑 정보
  • @OneToMany가 단방향으로 쓰이면 문제가 발생할 수 있다
  • 속도를 위해 기본적으로 FetchType 설정이 LAZY 로 설정되어 있습니다.
  • 속성
    • mappedBy : 연관관계의 주인 필드를 선택
    • fetch : 글로벌 페치 전략 설정
    • cascade : 영속성 전이 기능을 사용
    • targetEntity : 연관된 엔티티의 타입 정보를 설정

:: @ManyToOne

  • 다대일 관계를 나타내는 매핑 정보
  • 속성
    • optional (default true) : false로 설정하면 연관된 엔티티가 반드시 있어야 함.
    • fetch : 글로벌 패치 전략 설정
      • 기본이 EGEAR 로 설정되어있으나 실무에서는 기본 LAZY로 설정
    • cascade : 영속성 전이 기능 사용
    • targetEntity : 연관된 엔티티의 타입 정보 설정 (targetEntity = Member.class 식으로 사용)

:: @JoinColumn

  • 외래 키 매핑 시 사용 (Join 을 요청하기 위한 매핑정보로 쓰인다.)
  • @ManyToOne 어노테이션과 주로 함께 쓰인다. (조인대상 컬럼 지정기능을 안쓸거면 생략해도 됨)
  • name 속성은 매핑할 외래키의 이름
  • 어노테이션을 생략해도 외래 키가 생성됨.
    • 생략 시 외래키의 이름이 기본 전략을 활용하여 생성된다.
  • 속성
    • name : 매핑할 외래 키의 이름
    • referencedColumnName : 외래 키가 참조하는 대상 테이블의 컬럼명
    • foreignKey : 외래 키 제약조건 지정 (테이블 생성 시에만 적용됨)
    • unique/nullable/insertable/updateable/columnDefinition/table : @Column의 속성과 같음

:: @ManyToMany

  • 다대다 관계를 나타내는 매핑 정보 (N:M)
  • 다대다 설정을 하게되면 중간 매핑테이블(JoinTable)이 자동으로 생성된다.
  • 중간 매핑 테이블은 JPA상에서 숨겨져서(Entity 정의 없이) 관리된다.
  • 매핑 테이블 관리가 불가능하여서 실무에서는 잘 사용하지 않는 기능
    • 실무에서는 매핑 테이블 직접 정의
    • TableA(@OneToMany) > MappingTable(@ManyToOne, @ManyToOne) > TableB(@OneToMany)

복합키 사용

  • PK 1개 - 단일키
  • FK 2개 - 복합키 (PK 없이)
  • 복합키 선언 방식 2가지 -> @IdClass, @EmbeddedId

GitHub 실습코드

0개의 댓글