[JPA] 즉시 로딩과 조인 전략

  • 엔티티의 즉시 로딩을 위하 @ManyToOnefetch 속성을 FetchType.EAGER 로 설정함
  • 엔티티를 조회하면 연관된 엔티티도 함께 조회된다.
  • Member 조회시 연관된 Team 도 함께 로드된다.
@Entity
public class Member {
    // ...

    // 즉시 로딩으로 설정하여 Member를 로딩할 때 Team도 함께 로딩된다.
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "TEAM_ID")
    private Team team;

    // ...
}
// 즉시 로딩을 사용하는 경우의 실행 코드 예시
public class SomeService {

    public void loadMemberAndTeam(EntityManager em) {
        // 회원을 조회할 때 연관된 팀도 함께 조회됨 (즉시 로딩)
        Member member = em.find(Member.class, "member1");
        
        // getTeam 호출 시 이미 로딩된 팀 엔티티를 반환
        Team team = member.getTeam();
    }
}
  • 쿼리는 별도 NULL 설정을 하지 않은 경우 외부 조인으로 데이터를 가져옵니다.
  • 만약 NOT NULL 의 제약조건을 추가한다면
// 외래 키에 NOT NULL 제약을 설정하고 내부 조인을 사용하도록 설정하는 예시
@Entity
public class Member {
    //...

    // 즉시 로딩 설정과 함께 NOT NULL 제약을 명시하여 내부 조인 사용을 알림
    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "TEAM_ID", nullable = false)
    private Team team;

    //...
}
  • @ManyToOne(optional = false)
  • @JoinColumn(nullable = false)
    • 둘중의 하나만 사용해도 JPA는 내부조인을 사용하게 됩니다.

Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA]영속성 전이 :저장  (0) 2023.11.04
JPA 복합 키  (0) 2023.11.04
[JPA] 프록시 객체의 초기화  (0) 2023.11.04
[JPA] 영속성 컨텍스트, 프록시 객체, 준영속 상태  (0) 2023.11.04
[JPA] 지연 로딩과 프록시의 활용  (0) 2023.11.04