오봉이와 함께하는 개발 블로그

스프링 데이터 JPA - JPA Hint & Lock 본문

BE/JPA

스프링 데이터 JPA - JPA Hint & Lock

오봉봉이 2022. 9. 14. 00:25
728x90

JPA Hint & Lock

JPA Hint는 JPA 쿼리 힌트로, SQL 힌트가 아니라 JPA 구현체에게 제공하는 힌트다.

쿼리 힌트 사용

@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUsername(String username);
@Test
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");
    em.flush(); //Update Query 실행X
}

@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))를 통해서 readOnly 옵션을 true로 설정했기 때문에 Update Query가 실행되지 않는다.

JPA 특성상 변경 감지를 사용하기 때문에 내부적으로 아무리 최적화를 이뤄냈어도 어찌 되었든 메모리를 사용하고 CPU를 사용하기 때문에 모든 동작이 비용으로 이어지는데, 해당 설정을 통해 변경 감지를 하지 않을 수 있고 비용을 절약할 수 있다.

Lock

@Lock(LockModeType.PESSIMISTIC_WRITE)
List<Member> findByUsername(String name);

org.springframework.data.jpa.repository.Lock 어노테이션을 사용한다.

자세한 내용은 메뉴얼을 참조하자.

인프런 김영한 지식공유자님 강의 : 실전! 스프링 데이터 JPA
728x90
Comments