티스토리 뷰

JPA

JPA 조인 전략 변경하기

siyoon210 2018. 12. 15. 20:33
반응형

JPA 조인(JOIN) 전략

엔티티(Entity)들 간의 관계가 맺어져 있다면, JPA는 조인(JOIN)을 이용해서 데이터베이스를 조회하게 됩니다. 조인전략중에 성능이 가장 좋은 조인 전략은 내부조인(INNER JOIN)입니다. 하지만 연관된 외래키가 null이 존재하는 경우에 내부조인을 사용할 경우 일부만 필터링을 해서 조회하는 문제가 생길 수 있습니다. 이러한 이유로 JPA는 외부조인(OUTER JOIN)을 기본설정으로 수행하게 됩니다.


내부조인 전략으로 변경하기

내부조인을 사용하고 싶다면 JPA에게 연관된 외래키에는 null이 존재하지 않음을 명시해주어야 합니다. 2가지 설정 방법중에 하나만 설정하면 됩니다. 참고로 @OneToMany와 @ManyToMany는 컬렉션으로 로딩해야 하므로 내부조인 설정은 불가능하고, @ManyToOne과 @OneToOne일때만 내부조인으로 설정이 가능합니다.


   1. @JoinColumn의 nullable로 설정하기

@Entity
public class Result {
    . . .
    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "question_id", nullable = false)
    private Question question;
    . . .
}

   2. @ManyToOne(혹은 @OneToOne)의 optional로 설정하기

@Entity
public class Result {
    . . .
    @ManyToOne(fetch = FetchType.EAGER, optional = false) 
    @JoinColumn(name = "question_id")
    private Question question;
    . . .
}


상황에 따라 다를 수 있지만, 개인적인 경험으로는 2번 방법을 사용할 것을 권장드립니다. 1번 방법에 경우 where 절에 외래키를 사용하는 경우 left outer 조인을 시행합니다.


이 포스팅은 '자바 ORM표준 JPA 프로그래밍 (김영한 저자)'를 참고하여 작성하였습니다.

반응형
댓글