JPA 연관 관계

목차

JPA 연관 관계

테이블과 객체 간 패러타임 차이로 인해 생기는 문제가 있다. 그 중 대표적인게 테이블 연관관계 를 객체로 풀어내는 것
테이블간의 연관관계를 객체 연관관계로 풀어내기 위해서는 아래 3가지 조건을 잘 이해해야 한다.

  • 방향
    • 테이블 연관관계는 양방향
    • 객체의 연관관계는 단방향으로만 존재한다.
    • 객체의 양방향 관계는 단방향 관계 2개를 이용해 만들어준다.
  • 다중성
    • One To One(일대일) 1:1
    • One To Many(일대다) 1:N
    • Many To One(다대일) N:1
    • Many To Many(다대다) N:M
  • 연관관계의 주인
    • 테이블 연관관계를 객체 양방향 연관관계로 만들기 위해서는 연관관계 주인 을 정해야 한다.
    • 객체의 두 관계중 하나를 연관관계의 주인으로 지정해 주인만이 외래 키 를 관리하게 한다.
    • 연관관계 주인은 외래키를 이용해 (등록, 수정) 등이 가능하지만 주인이 아닌 쪽은 읽기 만 가능하다

JoinColumn 어노테이션

외래키 를 매핑할 때 사용하는 어노테이션

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

ManyToOne 어노테이션

N:1 관계를 Mapping 하기 위한 어노테이션

속성 기능 기본 값
optional true 는 해당 객체에 null 값이 들어갈 수 있다는 의미,
false 는 해당 객체가 항상 있어야 함을 의미한다.
기본값은 true
fetch Fetch 전략을 설정한다. @ManyToOne(fetch = FetchType.EAGER)
cascade
targetEntity 연관된 엔티티의 타입 정보를 설정한다.

OneToMany 어노테이션

1:N 관계를 Mapping 하기 위한 어노테이션

속성 기능 기본 값
mappedBy 양방향 연관관계 mapping 시 연관관계 주인인 Entity 필드를 명시한다
fetch Fetch 전략을 설정한다. @OneToMany(fetch = FetchType.LAZY)
cascade
targetEntity 연관된 엔티티의 타입 정보를 설정한다.
orphanRemoval
Share