벌크 연산의 경우 영속성 컨텍스트를 무시하고 데이터베이스에 직접 실행 함
그렇기 때문에 영속성 컨텍스트와 데이터베이스 값이 서로 다를 경우가 발생함
벌크 연산 이후에 조회를 할 경우 영속성 컨텍스트에 데이터가 남아있다면
영속성 컨텍스트가 데이터베이스보다 우선이 됨
데이터베이스에는 업데이트 되었으나 조회 후 출력하는 값이 다르게 되는 문제 발생...
벌크 연산 이후에 무조건!!!
EntityManager의 flush, clear를 호출한다(=영속성 컨텍스트 초기화).
public void bulkUpdate() {
// count : 영향을 받은 건수
// 1. 영속성 컨텍스트를 무시하고 실행되기 때문에 데이터베이스와 영속성 컨텍스트의 값이 다름
long count = jpaQueryFactory
.update(member)
.set(member.username, "updatedName")
.where(member.age.lt(28))
.execute();
// 3. 우선권에 대한 문제 해결 : EntityManager 초기화
/**
* 매우 중요
*/
em.flush();
em.clear();
// 2. 우선권 : 영속성 컨텍스트 > 데이터베이스
List<Member> result = jpaQueryFactory
.selectFrom(member)
.fetch();
for(Member m : result) {
System.out.println(m);
}
}