오늘의하루

[알쓸JPA] readOnly? DB는 OK, 영속성은? 본문

Spring/JPA

[알쓸JPA] readOnly? DB는 OK, 영속성은?

오늘의하루_master 2024. 11. 28. 17:56

 

readonly 상태라면 영속성도 readonly일까? 라는 궁금증이 들어 테스트 코드를 작성하면서 알게 된 알아둬도 정말 쓸데 없는 내용을 공유하려고 합니다.

 

Hibernate에서 readonly 힌트를 사용하면 해당 엔티티를 조회할 때 스냅샷을 만들지 않게 됩니다.

이로 인해 더티 체킹이 발생하지 않으며 결국 수정 쿼리가 DB에 나가지 않게 됩니다.

  • 즉, readonly는 DB 쿼리 측면에서 수정할 수 없도록 만들어줍니다.

그런데 readonly 상태에서도 엔티티의 필드를 수정해봤더니 수정 쿼리는 발생하지 않지만 1차 캐시에는 수정된 값이 반영되는 걸 알게 되었습니다.

@Test
@Transactional(readOnly = true)
void queryHint() {
    // given
    Member member1 = memberRepository.save(new Member("member1", 10, null));
    entityManager.flush();
    entityManager.clear();

    // when
    Member findMember = memberRepository.findReadOnlyByUsername(member1.getUsername());
    findMember.setUsername("member2");
    entityManager.flush();

    // then
    Member result = memberRepository.findById(member1.getId()).get();
    assertThat(result.getUsername()).isEqualTo("member2");
}
Comments