Back-end/JPA

자바 ORM 표준 JPA 벌크 연산

이안_ian 2023. 5. 30. 13:29
반응형

벌크 연산

  • 쿼리 한 번으로 여러 테이블 로우 변경(엔티티)
  • executeUpdate()의 결과는 영향받은 엔티티 수 반환
  • update, delete 지원
  • insert(insert into .. select, 하이버네이트 지원)
String qlString = 	"update Product p" +
					"set p.price = p.price * 1.1 " +
                    "where p.stockAmount < :stockAmount";
int rsCnt = em.createQuery(qlString)
				.setParameter("stockAmount", 10)
                .executeUpdate();
                
int rsCnt = em.createQuery("update Member m set m.age = 20")
                .executeUpdate();

벌크 연산 주의

벌크 연산은 영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리 실행

  • 벌크 연산을 먼저 실행
  • 벌크 연산 수행 후 영속성 컨텍스트 초기화
//flush까지 된 상태
int rsCnt = em.createQuery("update Member m set m.age = 20")
                .executeUpdate();

//영속성 컨텍스트 초기화
em.clear();

연관 포스팅: https://smujihoon.tistory.com/278

 

출처 : https://www.inflearn.com/course/ORM-JPA-Basic

반응형