inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리스트를 한번에 업데이트 하고자 할 때 아래와 같은 방법 말고 다른 게 있을까요?

792

박민호

작성한 질문수 9

0

예를 들어 특정 회원을 전부 탈퇴시키고 싶을 때의 수도 코드입니다.

 

@Transactional

void 회원탈퇴메소드

List<회원> 회원리스트 = findByxxx();

 

for (회원 : 회원리스트) {

회원.set활성여부("탈퇴");

}

return;

 

이러면 이제 리턴 시점에 회원리스트 길이만큼 update 쿼리가 나가는 것을 봤는데요, 혹시 이거 말고 한꺼번에 업데이트 하는 방법이 있는지 궁금합니다. 아니면 그냥 이런 식으로 건별로 업데이트를 해야겠지요.

jpa dirtychecking list

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.
회원 탈퇴 시 리스트 한꺼번에 업데이트하는 방법이 궁금하신 것 같아요.

일반적으로 해당 도메인의 객체들을 한 번에 업데이트하는 것은 어려운 경우가 많아요. 따라서 리스트의 각 원소에 대해 개별적으로 업데이트하는 방식을 사용하는 것이 일반적이에요.

하지만, 효율적인 업데이트를 위해 일괄 업데이트를 시도하고자 한다면 JPA를 사용하면 좋아요. JPA는 변경된 엔티티를 감지하고 적절한 update 쿼리를 일괄 수행하도록 도와주는 기능을 제공합니다.

확실히 일괄 업데이트를 위해 사용할 수 있는 방법은 바로 “Querydsl”을 이용하는 것이에요. Querydsl을 사용하면 엔티티를 대상으로 쿼리를 작성할 수 있고, 동적으로 조건을 추가하여 한 번에 업데이트할 수도 있습니다.

아래는 JPA와 Querydsl을 사용하여 리스트를 한 번에 업데이트하는 예시 코드입니다.

@Transactional
void 회원탈퇴메소드() {
List<회원> 회원리스트 = queryFactory.selectFrom(회원)
.where(회원.활성여부.eq(“활성”))
.fetch();

for (회원 회원 : 회원리스트) {
    회원.set활성여부("탈퇴");
}

// JPA가 변경된 엔티티들을 감지하고 한 번에 업데이트해줍니다.
entityManager.flush();

return;

}

하지만, 실제 상황에서는 업데이트 대상이 되는 데이터의 양이 많지 않거나, 업데이트 시의 성능에 크게 영향을 주지 않는다면 기존 방식을 사용하는 것이 더 간단하고 편리할 수 있어요.

추가적인 도움이 필요하시다면 언제든지 물어보세요! 좋은 결과 있으시길 바랄게요.

리프레시토큰

0

40

1

로그인 확인

0

65

3

서비스에서와 컨트롤러의 @Vaild 적용 차이에 대해서

0

67

2

해결했습니다

0

51

1

지금 강의가 어려우신분 추천드립니다.

0

71

1

기존의 완성된 CRUD의 Build.gradle에 security관련 dependency를 추가하면 문제가 생깁니다.

0

73

2

EmailSender 관련 문의

0

67

1

CRA ? 질문입니다

0

65

1

[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.

0

59

1

[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.

0

93

6

aws 계정 생성 질문

1

89

1

조회 메서드 네이밍 질문

0

81

1

음성불량

0

60

1

장애 격리 관련해서 궁금한 부분이 있어요

0

67

2

질문있습니다.

0

61

1

코드 깃허브는 없을까요?

1

75

2

핵사고날 아키텍처 기반으로 멀티 모듈 설계 시 질문드립니다..

0

83

2

인넬리제이 무료버전

0

82

2

Post, PostEntity에서 User, UserEntity 의존

0

66

1

내부 객체 직접 접근에 관하여.

0

116

2

CertificationServiceTest

0

65

1

FlushModeType.COMMIT (12:45) 예시코드 질문

0

77

1

readme에 대한 자료는 따로 받아볼수 있나요?

0

108

2

InvalidCurriculumException DIP 적용 여부 문의

0

92

2