inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

776

박민호

작성한 질문수 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;

}

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

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

inheritance startegy 선택시 고려사항

0

8

0

Entity 동등성 비교

0

14

1

패키지 구분에 대해 궁금한게 있습니다

0

18

2

스프링부트 서버 에러나요

0

20

1

RepositoryTest의 패키지 위치가 domain인 이유

0

30

2

도메인 모델에서 관계와 규칙을 구분하는 방법

0

38

2

16 강의 메세지 retryCount의 의도

0

23

2

JPA Repository 질문이 있습니다!

1

35

2

페이지네이션 처리를 쿼리에서 하는 방식 질문

1

37

1

UserService, CertificationService 책임 분리 기준 질문

0

28

1

실무 조언 관련 질문입니다.

0

41

1

sdk 설정 오류

0

50

2

H2데이터베이스 파일 생성

0

51

2

SpringBoot 4.X에서의 Querydsl 설정

0

88

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

30

1

오탈자 - @Transactional

0

55

1

Dto와 Entity 사용 관련 질문

0

31

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

EC2 실습 중 docker-compose / docker ps 실행 시 권한 오류 문의

2

71

1

application.properties 작성 관련 질문

0

46

2

색깔구분

0

47

3

gradlew, java -jar 로 애플리케이션 실행시키기에서

1

49

1

리액트 관련 질문이 있습니다.

0

63

2

강의 관련 외 질문입니다.

0

65

2