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

23.09.27 10:16 작성 조회수 205

0

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

 

@Transactional

void 회원탈퇴메소드

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

 

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

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

}

return;

 

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

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.09.28

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

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

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

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

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

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

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

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

return;

}

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

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