JPA 영속성 관련 이슈 해결

아이스__아메리·2023년 7월 28일
0

JPA

목록 보기
18/18

발생

연동테스트 도중 알게된 이슈였는데 최초 개발 후 테스트에서는 아무 이슈가 없었는데 조회가 잘되어 모르고 있었는데 다음 연동테스트에서 500 ERROR가 발생했다.

개발 도중 발생한 이슈

java.lang.UnsupportedOperationException: null

이 예외는 변경 불가능한(immutable) 컬렉션(리스트, 셋 등)에서 수정 작업을 시도했을 때 발생한다.
데이터베이스에서 조회하여 반환된 Response는 Collections.unmodifiableList() 메서드로 생성된 읽기 전용 리스트에 요소를 추가하거나 삭제하려고 할 때 이 예외가 발생한다.

코드

List<ObjectResponse> responseList = ObjectRepository.findAllByMember(member).stream().map(ObjectResponse::ofOwner).toList();

List<ObjectResponse> appListAnotherJoinList = ObjectRepository.findAllByMemberAsCrew(member).stream()
             .map(ObjectResponse::ofCrew)
             .sorted(Comparator.comparing(ObjectResponse::getCreatedAt))
             .toList();
             
responseList.addAll(appListAnotherJoinList);

발생 시점

responseList.addAll(appListAnotherJoinList); 에서 null이슈가 발생했다.

설명

responseList로부터 반환된 결과가 변경 불가능한 리스트(immutable list)이기 때문에 발생했다.

해결

해당 메소드 내에서 리스트를 선언 후 두 개의 리스트를 합친다.

List<ObjectResponse> responseList = new ArrayList<>();

responseList.addAll(ObjectRepository.findAllByMember(member).stream().map(ObjectResponse::ofOwner).toList());

ObjectRepository.findAllByMemberAsCrew(member).stream()
        .map(ObjectResponse::ofCrew)
        .sorted(Comparator.comparing(AppTokenResponse::getCreatedAt))
        .forEach(responseList::add);

return responseList;
profile
츠케멘 좋아

0개의 댓글