- 엔티티의 즉시 로딩을 위하
@ManyToOne
의fetch
속성을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 |