220902 멤버 정보 수정시 수정이 되지 않는 경우

Jongleee·2022년 9월 2일
1

TIL

목록 보기
43/576

멤버 정보 수정시 수정이 되지 않는 경우


public ResponseEntity<?> modifyMemberInfo(HttpServletRequest request, MemberRequestDto requestDto, MultipartFile[] image) throws IOException {
    Member member = check.validateMember(request);
    String imgUrl = fileService.getImgUrl(image);
    member.update(requestDto,imgUrl);
    return new ResponseEntity<>(Message.success(null), HttpStatus.OK);
    }

와 같은 형태의 코드에서 멤버 값 업데이트가 되지 않는 현상이 발생함
업데이트 방식 자체는 다른 테이블에서 똑같이 사용하고 있으며 정상작동되는데 여기만 작동하지 않아서 업데이트가 이루어지는 update 아래줄에 sout으로 값을 찍어 확인해보았을때도 값이 들어있어서 이해가 안됐다.

원인

member를 인증과정에서 찾아오는데 그 이후에 Detached 상태가 되어 member가 업데이트 되어도 실제로 값이 반영되지는 않는 것이었다.

해결방법

memberRepository.save(member);

로 이 값을 merge하여 persistent 상태로 만들어 주면 업데이트가 제대로 동작한다.

이때 save 메소드는

@Transactional
    public <S extends T> S save(S entity) {
        if (this.entityInformation.isNew(entity)) {
            this.em.persist(entity);
            return entity;
        } else {
            return this.em.merge(entity);
        }
    }

와 같이 새로운 entity를 받으면 해당 엔티티를 persist상태로 만들어 주지만 아닌 경우에는 merge를 해준다.

2개의 댓글

comment-user-thumbnail
2022년 9월 2일

이거 repository에서 불러오면 update가 먹힙니다. JPA 속성 때문인것 같아요

답글 달기
comment-user-thumbnail
2022년 9월 9일

감사합니다 덕분에 한방에 해결됐어요👍👍

답글 달기