findById() 메서드를 usingRecursiveComparison() 으로 검증할 때 생기는 현상

일단 해볼게·2023년 8월 11일
0

Springboot

목록 보기
25/26

Post와 User는 N:1 관계이다.

@Test
  void findById() {

    // given
    userRepository.save(givenUser);
    Post savedPost = postRepository.save(givenPost);
    em.flush();
    em.clear();

    //when
    Post foundPost = postRepository.findById(givenPost.getId()).get();
    em.flush();

    // then
    assertThat(foundPost).isNotNull();
    assertThat(savedPost).usingRecursiveComparison().isEqualTo(foundPost);
  }

User와 Post를 저장하고 findById를 호출했다.

Hibernate: 
    select
        p1_0.id,
        p1_0.content,
        p1_0.created_at,
        p1_0.created_by,
        p1_0.title,
        p1_0.user_id 
    from
        posts p1_0 
    where
        p1_0.id=?
Hibernate: 
    select
        u1_0.id,
        u1_0.age,
        u1_0.created_at,
        u1_0.created_by,
        u1_0.hobby,
        u1_0.name 
    from
        users u1_0 
    where
        u1_0.id=?

그런데 예상한 쿼리문보다 하나 더 쿼리가 발생했다. 원래라면 첫 번째 쿼리문만 나가야 하는데 두 번째 쿼리문까지 발생했다. 왜 그럴까? assertThat(savedPost).usingRecursiveComparison().isEqualTo(foundPost); 때문이었다.

isEqualTo()는 동등성 비교를 한다. 이걸 비교하기 위해 두 번째 쿼리문이 나가게 된 것이다.

isEqualTo()를 들어가보면 필드끼리 비교한다고 나와있다. User 필드를 비교하기 위해 쿼리문이 하나 더 나가게 됐다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

즐겁게 읽었습니다. 유용한 정보 감사합니다.

답글 달기