작성
·
165
답변 2
0
안녕하세요. skaansxo1님
다음 코드를 주석을 보면서 돌려보시면 이해가 되실거에요.
@Test
public void bulkDelete() {
long count = queryFactory
.delete(member)
.where(member.age.gt(20))
.execute();
assertThat(count).isEqualTo(2);
// em.flush();
// em.clear();
List<Member> result = queryFactory
.selectFrom(member)
.fetch();
assertThat(result.size()).isEqualTo(2); //4개를 기대했는데 2개만 조회
//JPQL을 사용하면 SQL을 실행해서 DB에 있는 데이터를 기준으로 조회
for (Member member1 : result) {
System.out.println("member1 = " + member1);
}
//하지만 회원 3,4는 영속성 컨텍스트에 아직 남아있음(위험함)
//em.find()로 조회하면 영속성 컨텍스트를 먼저 찾음
//따라서 delete 벌크 연산 후 em.clear()로 영속성 컨텍스트를 초기화 하는 것이 안전함
Member member3 = em.find(Member.class, member3Id);
assertThat(member3).isNotNull();
Member member4 = em.find(Member.class, member4Id);
assertThat(member4).isNotNull();
}
감사합니다.
0