흰 스타렉스에서 내가 내리지

[Querydsl] 수정, 삭제 벌크 연산 본문

JPA

[Querydsl] 수정, 삭제 벌크 연산

주씨. 2024. 4. 20. 17:57
728x90

# 벌크 연산

  • 쿼리 한 번으로 대량 데이터 수정

 

# 나이가 28 미만인 회원의 이름을 비회원으로 지정

@Test
@Commit
public void bulkUpdate(){
    long count = queryFactory
            .update(member)
            .set(member.username, "비회원")
            .where(member.age.lt(28))
            .execute();

    em.flush();
    em.clear();

    List<Member> result = queryFactory
            .selectFrom(member)
            .fetch();

    for (Member member1 : result){
        System.out.println("member1 = " + member1);
    }
}

 

 

  • 벌크 연산이 수행되는 순간 영속성 컨텍스트와 DB 는 일치하지 않는다.
  • 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에, 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화하는 것이 안전하다

 

# 모든 회원의 나이를 1 더하라

/**
 * 모든 회원의 나이를 1 더하라
 */
public void bulkAdd(){
    long count = queryFactory
            .update(member)
            .set(member.age, member.age.add(1))
            .execute();
}

 

  •  곱하기는 multiply(x)

 

# 나이가 18 이상인 모든 회원을 삭제하라

public void bulkDelete(){
    long count = queryFactory
            .delete(member)
            .where(member.age.goe(18))
            .execute();
}

 

 

 

# 필수!!

em.flush();
em.clear();