programing

Spring Crud Repository .orelse던지다()

instargram 2023. 3. 8. 20:34
반응형

Spring Crud Repository .orelse던지다()

데이터베이스 쿼리가 빈 상태로 반환되는 경우 예외를 발생시키는 적절한 방법은 무엇입니까?저는 이 기능을 사용하려고 합니다..orElseThrow()메서드는 컴파일되지 않습니다.

Meeting meeting = meetingRepository.findByMeetingId(meetingId).orElseThrow(new MeetingDoesNotExistException(meetingId));

컴파일러에 다음과 같이 표시됩니다.

"그 방법 OrElse"Optional 형식의 Throw(공급자)는 인수(MeetingRestController)에 적용할 수 없습니다.회의가 존재하지 않음예외)

람다 표현으로 할 수 있나요?

Crud Repository:

import java.util.Optional;

import org.springframework.data.repository.CrudRepository;

public interface MeetingRepository extends CrudRepository<Meeting, Long>{
    Optional<Meeting> findByMeetingId(Long id);
}

예외:

@ResponseStatus(HttpStatus.CONFLICT) // 409
class MeetingDoesNotExistException extends RuntimeException{
  public MeetingDoesNotExistException(long meetingId){
    super("Meeting " + meetingId + " does not exist.");
  }
}

유형의 람다 식을 전달해 보십시오.Supplier<MeetingDoesNotExistException>:

Meeting meeting = 
    meetingRepository.findByMeetingId(meetingId)
                     .orElseThrow(() -> new MeetingDoesNotExistException(meetingId));

그 오류는 그것이 말하는 그대로입니다.

문서에는 다음 작업이 필요하다는 내용이 기재되어 있습니다.Supplier파라미터로 지정합니다.

고객님의 예외는 다음과 같습니다.RuntimeException(이것은,Supplier.그러므로,orElseThrow()는 그 인수 타입에 해당되지 않습니다.당신은 그것을 넘겨야 할 것이다.Supplier, 가 아닙니다.RuntimeException.

람다 식을 사용하는 것이 더 간단한 구문입니다.

언급URL : https://stackoverflow.com/questions/26727812/spring-crudrepository-orelsethrow

반응형