문제
특정 보드 ID에 관한 연결된 컬럼들이랑 그 각 컬럼들에 연결된 카드들 가져올때 N+1 문제 발생
먼저 코드를 보면 중간 테이블을 이용해서 특정 ID 보드를 가져오고 그 보드에서 연결된 컬럼들을(columnList) 가져온다.
그후 columnList에 들은 각 컬럼들에서 또 연결된 카드들을(columns.getCards() )가져오는데 N+1문제가 생긴다.
결국 이렇게 쿼리문이 5개 나간다.(해당 보드에 연결된 컬럼이 총5개)
원인
컬럼에 카드랑 연결관계인 cards필드를 지연로딩으로 설정해서 각 컬럼의 cards에 접근할때 쿼리문을 따로따로 날려서 컬럼 총 갯수만큼 쿼리문이 나간다.
해결
Fetch Join을 이용해서 총 컬럼의 정보를 가져올때 동시에 각 컬럼에 들은 카드정보도 가져온다.
특정 보드에 연결된 컬럼들의 id만 빼와서 리스트로 만들고 JPQL로 컬럼들의 리스트 받은다음 페치 조인을 이용해서
쿼리문 한번에 모든 정보를 가져오게 한다.
추가
'seok2' 카테고리의 다른 글
[만료된 액세스 토큰 정보 가져오기]JWT expired at 2024-11-18T08:40:20Z. Current time: 2024-11-18T08:41:18Z, a difference of 58493 milliseconds. Allowed clock skew: 0 milliseconds. (0) | 2024.11.18 |
---|---|
중간 테이블 데이터 삭제 문제 (0) | 2023.12.29 |
연관 관계 단방향 영속성 전이 Remove 오류 (0) | 2023.12.26 |
직렬화,역직렬화의 기본 생성자 필요 (0) | 2023.12.02 |
Mokito any() (0) | 2023.12.02 |