음식 테이블과 고객 테이블이 N : 1 양방향 관계인 경우

Test 코드
@Test
@DisplayName("아보카도 피자 조회")
void test1() {
Food food = foodRepository.findById(2L).orElseThrow(NullPointerException::new);
System.out.println("food.getName() = " + food.getName());
System.out.println("food.getPrice() = " + food.getPrice());
System.out.println("아보카도 피자를 주문한 회원 정보 조회");
System.out.println("food.getUser().getName() = " + food.getUser().getName());
}
결과

“아보카도 피자”의 가격을 조회했지만 자동으로 JOIN 문을 사용하여 연관관계가 설정되어 있는 고객 테이블의 정보도 가져오고 있다.
지연 로딩, 즉시 로딩
JPA는 연관관계가 설정된 Entity의 정보를 바로 가져올지, 필요할 때 가져올지 정할 수 있다.
- 즉, 가져오는 방법을 정하게되는데 JPA에서는 Fetch Type이라 부른다.
- Fetch Type
- LAZY: 지연 로딩으로 필요한 시점에 정보를 가져옵니다.
- EAGER: 즉시 로딩으로 이름의 뜻처럼 조회할 때 연관된 모든 Entity의 정보를 즉시 가져옵니다.
기본적으로 @OneToMany 애너테이션은 Fetch Type의 default 값이 `LAZY`로 지정되어 있고 반대로 @ManyToOne 애너테이션은 *`EAGER`로 되어있다.
영속성 컨텍스트와 지연 로딩
지연 로딩도 영속성 컨텍스트의 기능 중 하나입니다.
따라서 지연 로딩된 Entity의 정보를 조회하려고 할 때는 반드시 영속성 컨텍스트가 존재해야 합니다.
‘영속성 컨텍스트가 존재해야 한다’라는 의미는 결국 ‘트랜잭션이 적용되어있어야 한다’라는 의미와 동일합니다.
'Spring' 카테고리의 다른 글
| Spring Day 18 : 단위 테스트 (Unit Tests) (0) | 2024.02.19 |
|---|---|
| Spring Day 17 : JPA Query Methods (0) | 2024.02.14 |
| Spring Day 15 : API 명세서 작성(postman) (0) | 2024.02.08 |
| Spring Day 14 : SQL 제약조건 (0) | 2024.02.07 |
| Spring Day 13 : 회원의 상태 변경(isChecked()) (0) | 2024.02.06 |