[JPA] 연관관계 매핑 주요 어노테이션

이혜지·2020년 10월 22일

엔티티들은 대부분 엔티티와 연관관계가 있다.
1:1, 1:N, N:1, N:N의 방향성을 가지고 있다.
객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다.

@JoinColumn

  • 외래 키를 매핑할 때 사용한다.
속성설명기본값
name매핑할 외래 키 이름필드명 +_+ 참조하는 테이블의 기본 키 컬럼명
referencedColumnName외래 키가 참조하는 대상 테이블의 컬럼명참조하는 테이블의 기본 키 컬럼명
foreignKey(DDL)외래 키가 참조하는 대상 테이블의 컬럼명
unique nullable insertable. updatable columnDefinition table@Column의 속성과 같다.

@ManyToOne

  • 다대일 관계 매핑
속성설명기본값
optionalfalse로 설정하면 연관된 엔티티가 항상 있어야 한다.true
fetch글로벌 페치 전략을 설정한다.@ManyToOne=FetchType.EAGER @OneToMany=FetchType.LAZY
cascade속성 전이 기능을 사용한다.
targetEntity연관된 엔티티의 타입 정보를 설정한다. 이 기능은 거의 사용하지 않는다. 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있다.

OneToMany

  • 다대일 관계 매핑
속성설명기본값
mappedBy연관관계의 주인 필드를 선택한다.
fetch글로벌 페치 전략을 설정한다.@ManyToOne=FetchType.EAGER @OneToMany=fetchType.LAZY
cascade속성 전이 기능을 사용한다.
targetEntity연관된 엔티티의 타입 정보를 설정한다. 이 기능은 거의 사용하지 않는다. 컬렉션을 사용해도 제네릭으로 타입정보를 알 수 있다.

FetchType의 LAZY와 EAGER

  • LAZY
    • 지연로딩
    • 연관관계가 설정된 테이블에 select를 하지 않는다.
    • 1:N 과 같이 여러가지 데이터가 로딩이 일어날 경우 사용하는 방식
  • EAGER
    • 즉시로딩
    • 연관관계가 설정된 모든 테이블에 대해 조인이 이루어진다.
    • 1:1 연관관계와 같이 한 건만 존재할 때 사용하는 방식.
profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글