spring data jpa : jpa hint & lock
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user