@Test
void 벌크_업데이트(){
// given
memberRepository.save(new Member("member1", 10));
memberRepository.save(new Member("member2", 19));
memberRepository.save(new Member("member3", 20));
memberRepository.save(new Member("member4", 21));
memberRepository.save(new Member("member5", 40));
int resultCount = memberRepository.bulkAgePlus(20); // update 성공한 갯수만큼 리턴한다.
Assertions.assertThat(resultCount).isEqualTo(3);
// 하나의 트랜잭션에서 벌크연산의 결과값을 확인하려면 영속성 컨텍스트를 비워야 한다.
// @Modifying(clearAutomatically = true) 으로 대체할 수 있다.
// em.flush();
// em.clear();
// when
final List<Member> findAll = memberRepository.findAll();
Set<Integer> ages = new HashSet<>();
ages.add(10);
ages.add(19);
ages.add(21);
ages.add(22);
ages.add(41);
for (Member member : findAll) {
ages.remove(member.getAge());
System.out.println("member.getUsername() = " + member.getUsername());
System.out.println("member.getAge() = " + member.getAge());
}
// then
Assertions.assertThat(ages).size().isEqualTo(0);
}