Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SpringBoot
- 스프링 핵심 기능
- Servlet
- JPQL
- 백준
- Proxy
- jpa
- spring
- springdatajpa
- JDBC
- kotlin
- 스프링 핵심 원리
- Spring Boot
- 스프링
- QueryDSL
- 김영한
- java
- Android
- pointcut
- Greedy
- db
- Exception
- 인프런
- 그리디
- http
- AOP
- 자바
- transaction
- Thymeleaf
- 알고리즘
Archives
- Today
- Total
개발자되기 프로젝트
JPA Hint & Lock 본문
1. JPA Hint???
- JPA 쿼리 힌트(SQL 힌트가 아니라 JPA 구현체인 hibernate에 제공하는 힌트)
2. 쿼리 힌트 사용
- org.springframework.data.jpa.repository.QueryHints 어노테이션을 사용
- "org.hiberante.readOnly"가 적용되면 해당 메서드에 대해 스냅샷 만들지 않고,
따라서 변경감지도 하지 않음.
//org.hibernate.readOnly를 hiberante가 열어놨다!
//readOnly가 적용되면 영속성 컨텍스트에 스냅샷 안만들어 놓음.
@QueryHints(value= @QueryHint(name = "org.hibernate.readOnly", value = "true"))
Member findReadOnlyByUserName(String userName);
- 아래처엄 엔티티를 불러와서 변경을 해도 readOnly가 적용되어
- 스냅샷도 없고, 따라서 변경감지가 되지 않아 DB에 반영이안됨 ㅋㅋㅋ
@Test
public 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");
em.flush();
}
- forCounting : 반환 타입으로 Page 인터페이스를 적용하면 추가로 호출하는
페이징을 위한 count 쿼리도 쿼리 힌트 적용(기본값 true )
3. Lock : JPA에서 제공하는 lock을 편하게 사용할 수 있다.
@Lock(LockModeType.PESSIMISTIC_WRITE)
List<Member> findByUsername(String name);
@Test
public void lock(){
//given
Member member1 = new Member("member1", 10);
memberRepository.save(member1);
em.flush();
em.clear();
//when
List<Member> members = memberRepository.findLockByUserName("member1");
}
- ???update
select
member0_.member_id as member_i1_0_,
member0_.age as age2_0_,
member0_.team_id as team_id4_0_,
member0_.user_name as user_nam3_0_
from
member member0_
where
member0_.user_name=? for update
lock은 JPA책을통해 공부해봐야것다..
4. GitHub : 210829 JPA Hint, Lock
'인프런 > [인프런] Spring Data JPA' 카테고리의 다른 글
Auditing (0) | 2021.08.30 |
---|---|
사용자 정의 Repository (0) | 2021.08.30 |
@EntityGraph (0) | 2021.08.29 |
Query Method, 벌크성 수정 쿼리 (0) | 2021.08.29 |
SpringDataJpa 페이징, 정렬 (0) | 2021.08.29 |
Comments