DEV ℧ Developer Diary

[JPA] 다양한 연관관계 매핑 (3)

해당 포스트는 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리한 글입니다.

다양한 연관관계 매핑 (3)

@JoinColumn

외래키를 매핑할 때 사용

  • name : 매핑할 외래 키 이름 (기본값 : 필드명 + _ + 참조하는 테이블의 기본 키 컬럼명)
  • referencedColumnName : 외래 키가 참조하는 대상 테이블의 컬럼명 (기본값 : 참조하는 테이블의 기본키 컬럼명)
  • foreignKey(DDL) : 외래 키 제약조건을 직접 지정할 수 있다. 이 속성은 테이블을 생성할 때만 사용한다.
  • unique, nullable insertable, updatable, columnDefinition, table : @Column 의 속성과 같다.

@ManyToOne 주요 속성

다대일 관계 매핑

  • Optional : false로 설정하면 연관된 엔티티가 항상 있어야 한다. (기본값 : TRUE)
  • fetch : 글로벌 페치 전략을 설정한다 (기본값 : @ManyToOne=FetchType.EAGER, @OneToMany=FetchType.LAZY)
  • cascade : 영속성 전이 기능을 사용한다.
  • targetEntity : 연관된 엔티티의 타입 정보를 설정한다. 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있으므로, 이 기능은 거의 사용하지 않는다.

@OneToMany 주요 속성

일대다 관계 매핑

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

@OneToMany 에는 mappedBy가 있고 @ManyToOne에는 mappedBy가 없는 이유

@ManyToOne를 사용할 경우 사용한 필드는 무조건 Many 쪽에서 연관관계의 주인이 되어야 하기 때문이다.