JPA

쿼리 힌트란? (feat. 예제)

쿠카이든 2022. 2. 14. 12:09
728x90
  • JPA Hint
    • SQL 힌트가 아니라 JPA 구현체에게 제공하는 힌트
    • Hint를 사용하여 영속성 컨텍스트에 저장되는 것을 방지해 메모리 낭비를 막고 혹시 모를 변경사항에 대해 업데이트되지 않도록 할 수 있습니다.
  • 쿼리 힌트 사용 예
@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUsername(String username);
  • 쿼리 힌트 사용 확인 (read only 속성 때문에 업데이트가 실행이 안됨)
@Test
@Transactional
public void queryHint() throws Exception {
    //given
    memberRepository.save(new Member("member1", 10));
    em.flush();
    em.clear();
    
    //when
    Member member = memberRepository.findReadOnlyByUsername("member1");
    member.setUsername("member2");
    
    //then
    em.flush(); //Update Query 실행X
}
  • 결론 - 쿼리 힌트의 readOnly 기능은 다음 두가지 상황에서 이점이 있습니다.
    • 단순 조회인데 부하가 심한 API이거나 상당히 빈번하게 호출되는 경우
    • 성능테스트를 결과를 확인한 뒤 취할 수 있는 이점이 있는 경우
728x90