-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
벌크연산 관련 질문드립니다
21.06.03 23:10 작성 조회수 117
0
안녕하세요 강사님. 강의 듣다가 의문점이 하나 있어서 질문드립니다.
bulk update 후 동일 트랜잭션 내에서 엔티티를 조회했을때 영속성 컨텍스트에 update 결과가 반영안되는것까진 확인했습니다.
그런데 bulk delete 후에 엔티티를 조회하면 delete 결과가 반영이 되어있더라고요. (27강 12분 25초 delete문을 날린 후 Member 조회시 1개가 나옵니다)
그 이유가 궁금합니다. 결국 벌크연산에서 update문만 조심하면 되는건가요?
답변을 작성해보세요.
0
김영한
지식공유자2021.06.06
안녕하세요. 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
김영한
지식공유자2021.06.04
안녕하세요. skaansxo1님
뭔가 좀 이상하네요. 코드를 봐야할 것 같아요.
전체 프로젝트를 압축해서 zipkyh@naver.com으로 메일 보내주세요.
메일 보내실 때는 다음 사항을 꼭 지켜주세요.
1. 인프런 질문 링크를 걸어주세요.
2. 실행 방법을 알려주세요.
3. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
답변 2