[Spring] could not initialize proxy [...] - no Session 오류

2024. 4. 2. 19:52·2024

#1. Event

    @DisplayName("사용자가 리뷰 좋아요를 누른다.")
    @Test
    void likeReview() {
        //given
        User user = userRepository.save(createUser("1"));
        Book book = bookRepository.save(createBook());
        Review review = reviewRepository.save(createReview(user, book));

        //when
        reviewLikeService.createReviewLike(user.getId(), review.getId());

        //then
        List<ReviewLike> reviewLike = reviewLikeRepository.findAll();

        assertThat(reviewLike).hasSize(1)
                .extracting("userId", "reviewId") // 문제가 되는 부분
                .contains(
                        Tuple.tuple(user.getId(), review.getId())
                );
    }

 

일단 review_like는 user와 review의 중간 연결 테이블이다. 

즉, 다대다 관계를 풀기 위한 엔티티이다.

나는 테스트에서 review_like의 값을 검증하려고 테스트 코드를 작성하다가 해당 오류가 발생했다.

 

다시 생각하면 당연한 오류였다.

review_like 값을 가져오면 review와 user도 같이 넘어온다.

하지만 연관관계 속성 값이 지연 로딩이기 프록시 객체로 넘어와서 직접 읽으면 에러가 발생한다.

#2. Solution

    @DisplayName("사용자가 리뷰 좋아요를 누른다.")
    @Test
    void likeReview() {
        //given
        User user = userRepository.save(createUser("1"));
        Book book = bookRepository.save(createBook());
        Review review = reviewRepository.save(createReview(user, book));

        //when
        reviewLikeService.createReviewLike(user.getId(), review.getId());

        //then
        List<ReviewLike> reviewLike = reviewLikeRepository.findAll();

        assertThat(reviewLike).hasSize(1);
        assertThat(reviewLike.get(0).getUser().getId()).isEqualTo(user.getId());
        assertThat(reviewLike.get(0).getReview().getId()).isEqualTo(review.getId());
    }

 

수정한 코드를 보면 직접 값을 꺼내서 검증했다.

각 단위 테스트마다 clear 작업을 하고 수행하기 때문에 해당 테스트의 데이터는 1개인 것이 당연하다.

'2024' 카테고리의 다른 글

Redis Sorted Sets으로 인기 검색어 구현하기  (0) 2024.04.09
리뷰 좋아요 조회 쿼리 N + 1 문제 해결하기  (0) 2024.04.05
QueryDSL 동적 정렬 쿼리 OrderSpecifier 구현하기  (0) 2024.03.28
Spring Security 없이 소셜 로그인 구현하기  (0) 2024.03.17
[MySQL] Order By, Group By, Distinct  (2) 2024.01.30
'2024' 카테고리의 다른 글
  • Redis Sorted Sets으로 인기 검색어 구현하기
  • 리뷰 좋아요 조회 쿼리 N + 1 문제 해결하기
  • QueryDSL 동적 정렬 쿼리 OrderSpecifier 구현하기
  • Spring Security 없이 소셜 로그인 구현하기
heyh0
heyh0
  • heyh0
    doblog
    heyh0
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 2025
      • 2024
      • History
      • 기타
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    Algorithm
    AOP
    redis
    jpa
    querydsl
    동시성
    프로젝트
    oauth
    테스트
    Til
    회고
    C++
    Spring
    socket
    DB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
heyh0
[Spring] could not initialize proxy [...] - no Session 오류
상단으로

티스토리툴바