본문 바로가기

QueryDsl

querydsl 벌크연산 수행 주위사항

728x90
@Commit
@Test
public void bulkUpdate() throws Exception{

    //member1=10->비회원
    //member2=20->비회원
    //member3=30->유지
    //member4=40->유지

    long count = queryFactory
            .update(member)
            .set(member.username, "비회원")
            .where(member.age.lt(28))
            .execute();

    //DB에서 꺼내온 데이터보다 영속성컨텍스트가 우선권을가짐
    //벌크 연산후 flush와 clear을 해줘라

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

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


}

영속성 컨텍스트는 엔티티 객체의 일관성을 보장하기 때문입니다.

 

쉽게 이야기해서 같은 영속성 컨텍스트에서 한번 저장하거나 조회하게 되면, 항상 같은 엔티티 객체인것이 보장됩니다.

 

즉 , 벌크연산 후 em.flush와 em.clear을 해주어서.  DB에 데이터를 반영하고, 영속성 컨텍스트를 지웁니다.

 

728x90

'QueryDsl' 카테고리의 다른 글

JPQL 과 QueryDsl  (0) 2023.03.20
Querydsl join문 기본문법  (0) 2023.01.24
Query dsl 설정 및 테스트  (0) 2023.01.13