오봉이와 함께하는 개발 블로그
스프링 데이터 JPA - JPA Hint & Lock 본문
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
'BE > JPA' 카테고리의 다른 글
스프링 데이터 JPA - Auditing (0) | 2022.09.14 |
---|---|
스프링 데이터 JPA - 사용자 정의 리포지토리 구현 (0) | 2022.09.14 |
스프링 데이터 JPA - @EntityGraph (2) | 2022.09.13 |
스프링 데이터 JPA - 벌크성 수정 쿼리 (0) | 2022.09.13 |
스프링 데이터 JPA - 스프링 데이터 JPA 페이징과 정렬 (0) | 2022.09.13 |
Comments