기타

[오류] fetch join 엔티티가 조회되지 않는 오류 발생

나는시화 2024. 4. 3. 23:40

내용

게시물을 조회하면서 comments도 같이 조회하려고 했는데 게시물 조회가 안 됐음. 

package com.sreview.sharedReview.domain.jpa.jpaInterface;

import com.sreview.sharedReview.domain.jpa.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

public interface BoardRepository extends JpaRepository<Board, Long> {
    // 추가적인 쿼리 메서드가 필요하다면 작성

    @Query("select b from Board b join fetch b.comments c  where b.boardId =:boardId")
    Optional<Board> findBoardAndCommentsById(@Param("boardId") Long boardId);
}

원인

join fetch만 조회하면 inner 조인으로, 댓글이 없는 경우 게시물을 조회할 수가 없음. 

 

해결

처음에는 join 부분을 아예 제거했음. -> 게시물만 가져오는 것은 잘 되는 것을 확인. ->

생각해보니 댓글이 없으니 외부 left join을 사용해야겠다는 생각으로 left join fetch을 사용.

package com.sreview.sharedReview.domain.jpa.jpaInterface;

import com.sreview.sharedReview.domain.jpa.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

public interface BoardRepository extends JpaRepository<Board, Long> {
    @Query("select b from Board b left join fetch b.comments c  where b.boardId =:boardId")
    Optional<Board> findBoardAndCommentsById(@Param("boardId") Long boardId);
}

회사에서는 jpa를 사용하지 않아서 기본적은 사용 방법도 가물가물 하다.. 

집에서 사이드 프로젝트를 꾸준히 해야하는데 다른 개인 공부로 인해 시간이 잘 나지 않아서 좀 소홀히 했더니 얼마 되지도 않아서 기본적인 오류를 일으켰다.. 

그래도 오류를 해결하고 다른 공부를 할 수 있을 거 같아서 기분은 좋다.