지연 로딩
@ManyToOne(fetch = FetchType.LAZY) //team을 지연로딩 하겠어!
@JoinColumn(name = "TEAM_ID")
private Team team
지연 로딩???
얘는 일단 프록시 객체로 두겠어~(안불러올거임)
실제로 얘를 사용하는 시점에 초기화 할거야~
그 전엔 프록시객체임(껍데기만 가져옴)
즉시 로딩
@ManyToOne(fetch = FetchType.EAGER) //team을 즉시로딩 하겠어!
@JoinColumn(name = "TEAM_ID")
private Team team
즉시 로딩???
얘는 둘 다 함께 자주 쓰이니까 엔티티 초기화 둘이 같이 해줘~(쿼리 함께 바로ㄱㄱ)
JPA 구현체는 가능하면 조인을 사용해서 SQL 한번에 함께 조회
그런데... 즉시로딩 쓰지 마세염~
- 가급적 지연 로딩만 사용해요
ㄴ 성능 떨어짐, 복잡한 테이블이 얽혀있다면 더 문제, 걍 지연로딩 ㄱㄱ
- 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생한다
- 즉시 로딩은 JPQL에서 N+1 문제를 일으킴
ㄴ 쿼리 하나 날렸는데 N개의 문제가?!
- @ManyToOne, @OneToOne은 기본이 즉시로딩, LAZY 지연로딩으로 설정하세연
- @OneToMany, @ManyToMany는 기본이 지연로딩
1) 걍 먼저 지연로딩으로 깔음 ㄱㄱ
2) 필요할 때만 fetch join 해서 같이 가져오기
결론
- 모든 연관관계에 지연 로딩 쓰세연
- 즉시로딩 XXXXX 제발스지마연
- 같이 가져오고 싶으면 JPQL fetch 조인이나, 엔티티 그래프 기능 쓰세연
- 즉시 로딩은 쓰지마...상상못한 쿼리가 널 기다려~
'개발공부 개발새발 > DB' 카테고리의 다른 글
JPA ) 여러가지 값 타입~ (0) | 2022.11.25 |
---|---|
JPA ) 영속성 전이, 고아 객체 (0) | 2022.11.25 |
JPA) 프록시란 무엇인가 (0) | 2022.11.25 |
JPA) 상속관계 매핑 (여러 전략들과 @MappedSuperclass) (0) | 2022.11.25 |
JPA) 연관관계 매핑 ( 다대일, 일대다, 다대일, 다대다 ) (0) | 2022.11.24 |