애너테이션
@EntityGraph(attribute = "연관관계_매핑된_필드명")
: 연관관계 매핑된 엔티티의 정보를 한 번의 쿼리에 같이 불러옴. 매핑만 되어있으면 { } 로 묶어 중복선택 가능
: 단, 엔티티의 연관관계 매핑이 된 상태에서만 적용되며, 매핑시 사용된 EAGER, LAZY 에 따라 데이터를 다르게 불러옴
: @OnToMany는 FetchJoin 기본값이 LAZY, @ManyToOne은 기본값이 EAGER
@Query
: 레포지토리의 쿼리 메서드에서 직접 JPQL 쿼리를 작성 가능
JPQL
1. select : 불러올 조건 설정. 메서드 시그니처의 findAll 이면, select * 와 같은 역할을 함
2. from : 엔티티를 선택. from Entity e 같은 방식으로 엔티티 지정 및 변수 설정 하는 부분
3. where : 필터 조건 선택. 가령, e.id : accountId면, Entity안의 id값이 accountId와 같은지 비교하는 것
4. order by : 정렬조건. 가령, e.id desc면, Entity의 Id순으로 내림차순 정렬
5. with : 조건 설정
6. fetch join : 엔티티에 매핑이 되어 있다면, 매핑된 필드에 해당하는 객체 정보를 같이 불러옴
기본 구현 메서드
1. findById, findAll 등 : 기본 구현 메서드. 단, fetch join이나 @EntityGraph와 다르게, 해당객체의 정보를 먼저 select문으로 조회 후, 매핑된 객체정보에 대해선 다시 select 문이 따로 나가야 하므로 부하가걸림. ( n+1 문제 발생 )
2. 따로 Repository에 구현하지 않아도, 쓸 수 있다는 장점이 있음
참고자료
1. Fetch Join과 @EntityGraph : https://jaime-note.tistory.com/54
2. @EntityGraph란? : https://velog.io/@blackbean99/JPA-EntityGraph%EB%9E%80
3. n + 1 발생 원인 : https://www.popit.kr/jpa-n1-%EB%B0%9C%EC%83%9D%EC%9B%90%EC%9D%B8%EA%B3%BC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95/
4. fetch-graph 커스터마이징 : https://blog.leocat.kr/notes/2019/05/26/spring-data-using-entitygraph-to-customize-fetch-graph
5. LAZY 지연로딩을 사용해야하는 이유 : https://developer-hm.tistory.com/37
6. 즉시로딩(EAGER)와 지연로딩(LAZY) : https://ict-nroo.tistory.com/132
7. Select 쿼리 줄이기 : https://kok202.tistory.com/177
'Java & Spring > 옵션정리' 카테고리의 다른 글
[MySQL] AWS_RDS와 Workbench 연결하기 (0) | 2022.11.21 |
---|---|
[IntelliJ] 유용한 단축키 (0) | 2022.11.05 |
[메모] 공부할 것 (0) | 2022.11.02 |
[SpringBoot] 커스텀 애너테이션 관련 (0) | 2022.11.01 |
[SpringBoot] Repository - JPQL (0) | 2022.10.30 |