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 |
Tags
- Spring Boot
- springdatajpa
- 김영한
- Exception
- 백준
- spring
- JDBC
- Proxy
- SpringBoot
- transaction
- 스프링 핵심 원리
- java
- Android
- Thymeleaf
- 그리디
- http
- AOP
- 자바
- pointcut
- Greedy
- 알고리즘
- 인프런
- db
- kotlin
- Servlet
- 스프링
- jpa
- 스프링 핵심 기능
- QueryDSL
- JPQL
Archives
- Today
- Total
개발자되기 프로젝트
[JPQL] 벌크 연산 본문
1. 벌크연산이란???
- 한 건 딱 찍어서 하는 UPDATE, DELTE제외하고 나머지
- 재고가 10개 미만인 모~든 상품의 가격을 10% 인상하려면?
- JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL이 실행됨
- 재조가 10개 미만인 상품을 리스트로 조회
- 상품 엔티티의 가격을 10%인상
- 트랜잭션 커밋 시점에 변경감지 동작
- 변경된 데이터가 1000이면 1000번 UPDATE SQL날라감 ㄷㄷㄷ
- JPA도 쿼리 한방에 벌크 연산하도록 지원함
2. 예제
- 쿼리 한 방에 여러 테이블 로우 변경(엔티티)
- executeUpdate()의 결과는 영향받은 엔티티의 수를 반환함
- UPDATE, DELETE 지원
- INSERT(insert into... select, 하이버네이트 지원)
int resultCount = em.createQuery("update Member m set m.age = 20")
.executeUpdate();
System.out.println("resultCount = " + resultCount);
Hibernate:
/* update
Member m
set
m.age = 20 */ update
Member
set
age=20
resultCount = 3
3. 벌크연산 주의점
- 벌크 연산은 영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리 날림
- DB의 값과 영속성 컨텍트스의 값이 다를 가능성이 있음.
- 즉 변경된 내용이 바로 DB에 SQL을 통해 반영되기 때문에, 영속성 컨텍스트에 반영 안된 상태임.
- 직접 날리다 보니 꼬일 수 있음... 그러니
- 영속성 컨텍스트 작업 전 벌크 연산을 먼저 실행 하거나
- 별크 연산 수행 수 영속성 컨텍스트 초기화!
- 벌크 연산도 SQL이 나가기 때문에 실행 전 flush 됨 따라서 초기화만 해주면 됨.
4. GitHub :210816 Bulk operation
'인프런 > [인프런] 자바ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
JPQL Named 쿼리 (0) | 2021.08.16 |
---|---|
[JPQL] 엔티티 직접 사용 (0) | 2021.08.16 |
다형성 쿼리 (0) | 2021.08.16 |
Fetch Join2 (0) | 2021.08.16 |
FETCH JOIN (0) | 2021.08.16 |
Comments