Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[JPQL] 벌크 연산 본문

인프런/[인프런] 자바ORM 표준 JPA 프로그래밍

[JPQL] 벌크 연산

Seung__ 2021. 8. 16. 21:59

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


 

GitHub - bsh6463/JPQL_STUDY

Contribute to bsh6463/JPQL_STUDY development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 자바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