개발 일지/Spring

[Sprgin JPA] FetchType

미숫가루설탕많이 2023. 4. 9. 23:58

 JPA에서는 연관된 엔티티를 조회할 때 어떤 방식으로 가져올지를 'FetchType' 옵션으로 지정할 수 있다.

 

  • FetchType.EAGER
    : 해당 엔티티를 조회할 때 즉시 관련 엔티티도 함께 조회한다. 엔티티를 조회하는 쿼리를 실행할 때 연관된 엔티티도 함께 조회하기 때문에 성능 상 이점이 있다. 하지만 조회할 엔티티의 개수가 많아질 경우 부담을 줄 수 있으며, 엔티티 간의 연관 관계가 복잡해지면서 쿼리가 복잡해질 수 있다. 또한 원하지 않는 데이터를 로딩하는 경우가 발생할 수 있다.

  • FetchType.LAZY
    : 연관된 엔티티를 실제로 사용할 때만 조회한다. 엔티티를 로딩하는 쿼리를 실행하지 않기 때문에 초기 로딩 시간을 단축할 수 있다. 하지만 엔티티를 사용할 때마다 연관된 엔티티를 조회해야 하므로 성능 상 부담이 될 수 있으며, LAZY 로딩이 설정된 엔티티를 사용하는 시점이 트랜잭션의 범위를 벗어나는 경우 LazyInitializationException이 발생할 수 있다.

 

 

 

 

적용

 

@Entity
public class Order {
// Order 엔티티를 조회할 때 즉시 관련된 Member 엔티티도 함께 조회
    @ManyToOne(fetch = FetchType.EAGER)
    private Member member;
}

 

@Entity
public class Member {
// Member 엔티티를 조회할 때 연관된 Order 엔티티는 실제로 사용할 때만 조회
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
    private List<Order> orders;
}

'개발 일지 > Spring' 카테고리의 다른 글

[JPA] @ElementCollection  (0) 2023.04.30
[Spring Boot] web.xml  (0) 2023.04.12
[Spring WebFlux] Reactive Programming  (0) 2023.03.28
[Spring WebFlux] Reactive System  (0) 2023.03.27
[Spring Security] 토큰 기반 인증 절차  (0) 2023.03.21