자바 ORM 표준 JPA 프로그래밍(인프런)

Ch11. 객체지향 쿼리 언어2(중급 문법) - 벌크 연산

webmaster 2021. 12. 18. 13:21
728x90

재고가 10개 미만인 모든 상품의 가격을 10% 상승하려면? 

JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL 실행 

  • 1. 재고가 10개 미만인 상품을 리스트로 조회한다. 
  • 2. 상품 엔티티의 가격을 10% 증가한다. 
  • 3. 트랜잭션 커밋 시점에 변경 감지가 동작한다. 

변경된 데이터가 100건이라면 100번의 UPDATE SQL 실행

벌크 연산

벌크 연산 실행(executeUpdate)

  • 쿼리 한 번으로 여러 테이블 로우 변경(엔티티)
  • executeUpdate()의 결과는 영향받은 엔티티 수 반환
  • UPDATE, DELETE 지원 
  • INSERT(insert into.. select, 하이버네이트 지원)

벌크 연산 - 주의

  • 벌크 연산은 영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리
    • EX) 벌크 연산은 DB에 직접 쿼리를 바로 실행해주기 때문에 애플리케이션 값과, DB값이 다를 수가 있다.

해결 방안

  • 벌크 연산을 먼저 실행
  • 벌크 연산 수행 후 영속성 컨텍스트 초기화

벌크 연산 후에는 반드시 영속성 컨텍스트를 Flush를 해준다.

728x90