spring data jpa : jpa hint & lock

This commit is contained in:
haerong22
2021-09-02 00:36:10 +09:00
parent c610ca4568
commit b71b3ec8ca
2 changed files with 36 additions and 4 deletions

View File

@@ -5,12 +5,11 @@ import com.example.springdatajpa.entity.Member;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.jpa.repository.*;
import org.springframework.data.repository.query.Param;
import javax.persistence.LockModeType;
import javax.persistence.QueryHint;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
@@ -63,4 +62,10 @@ public interface MemberRepository extends JpaRepository<Member, Long> {
// @EntityGraph(attributePaths = {"team"})
@EntityGraph("Member.all")
List<Member> findEntityGraphByUsername(@Param("username") String username);
@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUsername(String username);
@Lock(LockModeType.PESSIMISTIC_WRITE)
Member findLockByUsername(String username);
}

View File

@@ -279,5 +279,32 @@ public class MemberRepositoryTest {
System.out.println("member.getTeam().getName() = " + member.getTeam().getName()); // fetch join
});
}
@Test
void queryHint() {
// given
Member member1 = new Member("member1", 10);
memberRepository.save(member1);
em.flush();
em.clear();
// when
Member findMember = memberRepository.findReadOnlyByUsername("member1");
findMember.setUsername("member2");// read only 옵션으로 변경 감지 X
em.flush();
}
@Test
void lock() {
// given
Member member1 = new Member("member1", 10);
memberRepository.save(member1);
em.flush();
em.clear();
// when
Member findMember = memberRepository.findLockByUsername("member1");
}
}