쿼리메소드 - JPA Hint&Lock

박찬우·2024년 1월 11일

스프링 데이터 JPA

목록 보기
9/18

Hint

  • SQL 힌트가 아니라 JPA 구현체에게 제공하는 힌트
@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUsername(String username);
Member user1 = memberRepository.save(new Member("user1", 10));
em.flush();
em.clear();

// 영속성 컨텍스트에 등록됨
// 변경감지 발생
Member member = memberRepository.findById(user1.getId()).get();
member.setUsername("user2");
em.flush(); // update O
em.clear();

// 조회용으로만 사용하면 변경감지가 작동하지 않음
Member member2 = memberRepository.findReadOnlyByUsername("user2");
member.setUsername("user3");
em.flush(); // update X
em.clear(); 

Lock

@Lock(LockModeType.PESSIMISTIC_WRITE)
List<Member> findLockByUsername(String username);
Member user1 = memberRepository.save(new Member("user1", 10));
em.persist(user1);
em.flush();
em.clear();

List<Member> result = memberRepository.findLockByUsername("user1");
profile
진짜 개발자가 되어보자

0개의 댓글