2014-11-04 5 views
6

데이터베이스 쿼리가 빈을 반환하면 예외를 throw하는 적절한 방법은 무엇입니까? 나는 .orElseThrow() 방법을 사용하기 위해 노력하고있어하지만 컴파일되지 않습니다 :Spring CrudRepository .orElseThrow()

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

을 컴파일러는 말하고있다 :

"그가 orElseThrow 옵션 종류의 (공급 업체)가 적용되지 않습니다 방법 인수 (MeetingRestController.MeetingDoesNotExistException)

은 가능한 람다 표현식이 작업을 수행 할 수 있나요?

CR udRepository :

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."); 
    } 
} 

답변

21

유형 Supplier<MeetingDoesNotExistException>의 람다 식을 전달하는 시도는 :

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

Worked! 감사! – szxnyc

0

오류는 말씀을 의미합니다.

orElseThrow에 대한 설명서는 Supplier을 매개 변수로 사용한다고 설명합니다.

귀하의 예외는 RuntimeException이며 Supplier이 아님을 명시하셨습니다. 따라서 orElseThrow()은 해당 인수 유형에는 적용 할 수 없습니다. RuntimeException이 아닌 Supplier을 전달해야합니다.

람다 식을 사용하는 것이 더 간단합니다.

관련 문제