JPA에서도 Hint를 사용할 수 있다.
JPA를 사용해서 데이터를 조회하면 영속성 컨텍스트에 관리되고, 수정을 하게 되면 업데이트 쿼리도 발생하는데
Hint를 사용해서 영속성 컨텍스트에 저장되는 것을 막고, 변경 사항에 대한 수정이 발생되지 않도록 한다.
JPA는 영속성 컨텍스트에 보관할 때 최초의 상태를 복사해서 저장하는데, 이것을 스냅샷이라고 한다. 엔티티와 이 스냅샷을 비교해서 변경된 엔티티를 찾게 된다.
하이버네이트에서 조회만 가능하도록 Hint를 제공한다.
@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value="true")) // 스냅샷을 만들지 않는다.
Member findReadOnlyByUsername(String username);
Member findMember = memberRepository.findReadOnlyByUsername("member1");
findMember.setUsername("member2");
JPA에서 Lock을 사용하려면 @Lock와 LockModeType을 지정해야한다.
아래는 PESSIMISTIC_WRITE 비관적 락으로 지정했다.
@Lock(LockModeType.PESSIMISTIC_WRITE)
List<Member> findLockByUsername(String username);
