빡코

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

Java/JPA

[스프링 데이터 JPA] JPA Hint & Lock

chris.djang 2023. 5. 11. 21:25
    //Lock 힌트
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    List<Member> findLockByUsername(String username);
    
    @Test
    public void LockTest() throws Exception {
        //given
        Member member1 = memberRepository.save(new Member("member1", 10));
        em.flush();
        em.clear();

        //when
        List<Member> result = memberRepository.findLockByUsername("member1");

    }

JPA HintJPA 쿼리힌트(SQL 힌트가아니라 JPA 구현체 하이버네이트에게 제공하는 힌트)

//readOnly는 변경 감치 체크를 하지 않기 때문에, 업데이트를 진행하지 않는다. 
@QueryHints(value = @QueryHint( name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUsername(String username);

 @Test
    public void queryHint() {
        //given
        Member member1 = memberRepository.save(new Member("member1", 10));
        em.flush();
        em.clear();

        //when
        Member findMember = memberRepository.findMemberByUsername("member1");
        findMember.setUsername("member2");

        em.flush();
}

@Lock 실행 쿼리 

    select
        member0_.member_id as member_i1_0_,
        member0_.age as age2_0_,
        member0_.team_id as team_id4_0_,
        member0_.username as username3_0_ 
    from
        member member0_ 
    where
        member0_.username=? for update