JPA Hint

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를 사용하는 것도 고려해 봐야 한다. 이점이 크지 않을 수 있다.