1. 프록시 객체
- 가짜 객체
- 지연로딩 기능을 사용하기 위해 쓰임
- 실제 객체에 대한 참조를 가짐
2. 지연로딩
-
연관된 엔티티를 실제 사용할 때 조회
-
answer.getQuestion().getName() 처럼 질문 엔티티를 실제 사용하는 시점에 JPA가 SQL을 호출하여 질문 엔티티를 조회한다.
-
설정 : @ManyToOne(fetch = FetchType.LAZY)
예제 (Test Code)
1) Answer Entity
@ManyToOne의 fetch타입을 지연로딩(FetchType.LAZY)로 지정한다.
2) Answer 엔티티 조회
test코드에서 answerRepository.findById(1L)를 수행하여, 해당 answer 엔티티를 조회한다.
2_1) 지연로딩 실행 SQL
sql문을 보면, 단순히 answer만 조회하는 것을 볼 수 있다.
3) Answer 엔티티와 연관된 Question 엔티티 조회
3_1) 지연로딩 실행 SQL
question 엔티티를 조회할 때 select문을 호출하는 것을 볼 수 있다.
3. 즉시로딩
- 엔티티를 조회할 때 연관된 엔티티도 함께 조회
- em.find(Answer.class, "answer1")를 호출할 때 답변 엔티티와 연관된 질문 엔티티도 함께 조회한다.
- 설정 : @ManyToOne(fetch = FetchType.EAGER)
예제 (Test Code)
1) Answer Entity
@ManyToOne의 fetch타입을 즉시로딩(FetchType.EAGER)로 지정한다.
2) Answer 엔티티 조회
2_1) 즉시로딩 실행 SQL
즉시로딩인 경우, answer엔티티만 조회하더라도, answer와 question을 조인해서 한 번에 조회하는 것을 볼 수 있다.
3) Answer 엔티티와 연관된 Question 엔티티 조회
3_1) 즉시로딩 실행 SQL
즉시로딩이기 때문에 추가 sql문 없이, 이미 로딩된 question엔티티를 통해 question의 이름을('질문1') 출력하는 것을 볼 수 있다.
'Web > JPA' 카테고리의 다른 글
[JPA] 트랜잭션 (0) | 2019.05.29 |
---|---|
[JPA] 영속성 컨텍스트 (Persistence context) (0) | 2019.05.28 |