JPA 구현체에게 제공하는 힌트이다.
하이버네이트에게 더 많은 일을 시키고 싶어서 보내주는 힌트이다. SQL에게 보내는 힌트가 아니다.
@Test
public void queryHint() {
Member member1 = new Member("member1", 10);
memberRepository.save(member1);
em.flush();
em.clear();
Member findMember = memberRepository.findById(member1.getId()).get();
findMember.setUsername("member2");
em.flush();
}
@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUsername(String username);
@Test
public void queryHint() {
Member member1 = new Member("member1", 10);
memberRepository.save(member1);
em.flush();
em.clear();
Member findMember = memberRepository.findReadOnlyByUsername("member1");
findMember.setUsername("member2");
em.flush();
}
성능 테스트 후에 결정하면 되는데 애플리케이션 전체를 봤을 때 모든 곳에 Readonly를 넣는다고 성능이 크게 좋아지지 않는다. 일일히 공수를 들여서 저것을 넣는 것은 섣부른 최적화가 될 수 있다.
진짜 조회 성능이 부족하다면 redis를 사용하는 것도 고려해 봐야 한다. 이점이 크지 않을 수 있다.