JVM/JPA

@ManyToOne, @JoinColumn

kyoulho 2023. 6. 12. 21:23

@ManyToOne

다대일 관계를 나타내는데 사용한다.

속성 기능  기본값
optional false로 설정하면 연관된 엔티티가 항상 있어야 한다. true
fetch 글로벌 페치 전략을 설정한다. FetchType.EAGER
cascade 영속성 전이 기능을 사용한다.  
targeEntity 연관된 엔티티의 타입 정보를 설정한다.
제네릭으로 타입 정보를 알 수 있다면 생략해도 된다.
 
FetchType.EAGER 전략
단건 조회시 join 하지만 다건 조회시 N+1 이 발생한다.
BatchSize를 조절하거나 JPGL에 fetch join을 사용하자

 

@JoinColumn

외래 키를 매핑할 때 사용한다.

다대일 관계에서는 생략하여도 조인테이블 전략을 사용하지 않는다.

속성 기능 기본값
name 매핑할 외래 키 컬럼 이름 필드명_참조하는 테이블의 컬럼명
referencedColumnName 외래 키가 참조하는 대상 테이블의 컬럼명
name 속성과 값이 같으면 생략할 수 있다.
참조하는 테이블의 컬럼명
foreignKey(DDL) 외래 키 제약조건을 직접 지정할 수 있다.
테이블 생성할 때만 사용한다.
 
unique
nullable
insertable
updateable
columnDefinition
table
@Column의 속성과 같다  
@Entity
public class Team {
    @Id
    @Column(name = "TEAM_ID")
    private String id;

    private String name;
}

@Entity
public class Member {
    @Id
    @Column(name = "MEMBER_ID")
    private String id;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
}

'JVM > JPA' 카테고리의 다른 글

@OneToOne  (0) 2023.06.16
@OneToMany  (0) 2023.06.12
@Access  (0) 2023.06.11
@Transient  (0) 2023.06.11
@Lob  (0) 2023.06.11