
벌크 연산에 대한 설명은 지난 글에 있다.
참고: https://un-lazy-midnight.tistory.com/115
JPA | JPQL 중급 문법 뿌시기 - 다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크 연산
다형성 쿼리 TYPE 조회 대상을 특정 자식으로 한정 예) Item 중에서 Book, Movie를 조회해라 [JPQL] select i from Item i where type(i) IN (Book, Movie) [SQL] select i from i where i.DTYPE in (‘B’, ‘M’) TREAT 자바의 타입
un-lazy-midnight.tistory.com
순수 JPA의 벌크성 쿼리
예제)
특정 나이 이상인 Member들의 나이를 1씩 증가시킨다.
Repository 코드)
@Repository
public class MemberJpaRepository {
public int bulkAgePlus(int age){
return em.createQuery("update Member m set m.age = m.age +1 where m.age >= :age")
.setParameter("age",age)
.executeUpdate();
}
테스트 코드)
@Test
public void bulkUpdate(){
//given
memberJpaRepository.save(new Member("member1",10));
memberJpaRepository.save(new Member("member2",19));
memberJpaRepository.save(new Member("member3",20));
memberJpaRepository.save(new Member("member4",22));
memberJpaRepository.save(new Member("member5",40));
//when
int resultCount = memberJpaRepository.bulkAgePlus(20);
//then
assertThat(resultCount).isEqualTo(3);
}
스프링 데이터 JPA의 벌크성 쿼리
예제)
특정 나이 이상인 Member들의 나이를 1씩 증가시킨다.
Repository 코드)
@Modifying
@Query("update Member m set m.age = m.age +1 where m.age >= :age")
int bulkAgePlus(@Param("age") int age);
테스트 코드)
@Test
public void bulkUpdate(){
//given
memberRepository.save(new Member("member1",10));
memberRepository.save(new Member("member2",19));
memberRepository.save(new Member("member3",20));
memberRepository.save(new Member("member4",22));
memberRepository.save(new Member("member5",40));
//when
int resultCount = memberRepository.bulkAgePlus(20);
//then
assertThat(resultCount).isEqualTo(3);
}
주의 사항
영속성 컨텍스트와 DB의 데이터가 일치하지 않을 수 있다.
그렇기 때문에 벌크 연산 후에는 영속성 컨텍스트를 다 지워줘야 한다.
@Test
public void bulkUpdate(){
//given
memberRepository.save(new Member("member1",10));
memberRepository.save(new Member("member2",19));
memberRepository.save(new Member("member3",20));
memberRepository.save(new Member("member4",22));
memberRepository.save(new Member("member5",40));
//when
int resultCount = memberRepository.bulkAgePlus(20);
//영속성 컨텍스트 안의 데이터들을 지워버린다.
em.flush();
em.clear();
//then
assertThat(resultCount).isEqualTo(3);
}
영속성 컨텍스트와 flush()에 대한 설명은 이전 글을 참고하자.
https://un-lazy-midnight.tistory.com/87
JPA | 엔티티의 생명주기와 영속성 컨텍스트를 알아보자
들어가기 전에 참고 자료 - JPA 구동 방식 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" 이라는 뜻이다. 논리적인 개념이므로 눈에 보이지는 않는다. 일종의 공간이라고 생각하면 된다. 엔티티
un-lazy-midnight.tistory.com
https://un-lazy-midnight.tistory.com/88
JPA | 플러시와 준영속 상태를 알아보자
간단히 말해서 플러시란? 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것 플러시 발생 - 변경 감지(Dirty Checking) - 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 - 쓰기 지연 SQL 저장소
un-lazy-midnight.tistory.com
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
Spring Data JPA | JPA 힌트 @QueryHint 와 Lock (1) | 2023.05.09 |
---|---|
Spring Data JPA | @EntityGraph란? (0) | 2023.05.09 |
Spring Data JPA | 순수 JPA와 스프링 데이터 JPA의 페이징과 정렬 비교하기 (0) | 2023.05.09 |
Spring Data JPA | 파라미터 바인딩과 반환 타입 (0) | 2023.05.09 |
Spring Data JPA | @Query, 값, DTO 조회하기 (0) | 2023.05.09 |

벌크 연산에 대한 설명은 지난 글에 있다.
참고: https://un-lazy-midnight.tistory.com/115
JPA | JPQL 중급 문법 뿌시기 - 다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크 연산
다형성 쿼리 TYPE 조회 대상을 특정 자식으로 한정 예) Item 중에서 Book, Movie를 조회해라 [JPQL] select i from Item i where type(i) IN (Book, Movie) [SQL] select i from i where i.DTYPE in (‘B’, ‘M’) TREAT 자바의 타입
un-lazy-midnight.tistory.com
순수 JPA의 벌크성 쿼리
예제)
특정 나이 이상인 Member들의 나이를 1씩 증가시킨다.
Repository 코드)
@Repository
public class MemberJpaRepository {
public int bulkAgePlus(int age){
return em.createQuery("update Member m set m.age = m.age +1 where m.age >= :age")
.setParameter("age",age)
.executeUpdate();
}
테스트 코드)
@Test
public void bulkUpdate(){
//given
memberJpaRepository.save(new Member("member1",10));
memberJpaRepository.save(new Member("member2",19));
memberJpaRepository.save(new Member("member3",20));
memberJpaRepository.save(new Member("member4",22));
memberJpaRepository.save(new Member("member5",40));
//when
int resultCount = memberJpaRepository.bulkAgePlus(20);
//then
assertThat(resultCount).isEqualTo(3);
}
스프링 데이터 JPA의 벌크성 쿼리
예제)
특정 나이 이상인 Member들의 나이를 1씩 증가시킨다.
Repository 코드)
@Modifying
@Query("update Member m set m.age = m.age +1 where m.age >= :age")
int bulkAgePlus(@Param("age") int age);
테스트 코드)
@Test
public void bulkUpdate(){
//given
memberRepository.save(new Member("member1",10));
memberRepository.save(new Member("member2",19));
memberRepository.save(new Member("member3",20));
memberRepository.save(new Member("member4",22));
memberRepository.save(new Member("member5",40));
//when
int resultCount = memberRepository.bulkAgePlus(20);
//then
assertThat(resultCount).isEqualTo(3);
}
주의 사항
영속성 컨텍스트와 DB의 데이터가 일치하지 않을 수 있다.
그렇기 때문에 벌크 연산 후에는 영속성 컨텍스트를 다 지워줘야 한다.
@Test
public void bulkUpdate(){
//given
memberRepository.save(new Member("member1",10));
memberRepository.save(new Member("member2",19));
memberRepository.save(new Member("member3",20));
memberRepository.save(new Member("member4",22));
memberRepository.save(new Member("member5",40));
//when
int resultCount = memberRepository.bulkAgePlus(20);
//영속성 컨텍스트 안의 데이터들을 지워버린다.
em.flush();
em.clear();
//then
assertThat(resultCount).isEqualTo(3);
}
영속성 컨텍스트와 flush()에 대한 설명은 이전 글을 참고하자.
https://un-lazy-midnight.tistory.com/87
JPA | 엔티티의 생명주기와 영속성 컨텍스트를 알아보자
들어가기 전에 참고 자료 - JPA 구동 방식 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" 이라는 뜻이다. 논리적인 개념이므로 눈에 보이지는 않는다. 일종의 공간이라고 생각하면 된다. 엔티티
un-lazy-midnight.tistory.com
https://un-lazy-midnight.tistory.com/88
JPA | 플러시와 준영속 상태를 알아보자
간단히 말해서 플러시란? 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것 플러시 발생 - 변경 감지(Dirty Checking) - 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 - 쓰기 지연 SQL 저장소
un-lazy-midnight.tistory.com
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
Spring Data JPA | JPA 힌트 @QueryHint 와 Lock (1) | 2023.05.09 |
---|---|
Spring Data JPA | @EntityGraph란? (0) | 2023.05.09 |
Spring Data JPA | 순수 JPA와 스프링 데이터 JPA의 페이징과 정렬 비교하기 (0) | 2023.05.09 |
Spring Data JPA | 파라미터 바인딩과 반환 타입 (0) | 2023.05.09 |
Spring Data JPA | @Query, 값, DTO 조회하기 (0) | 2023.05.09 |