2017-12-14 4 views
3

우리는 Hibernate-gernated 도메인 객체들의 패치 워크를 가지고있다.Spring 데이터의 옵션 사용 방법 <Object> 반환 값

봄 데이터와
@Entity 
@Table(name = "events_t", schema = "public") 
public class EventsT implements java.io.Serializable {  
    private int id; 
    private RecallsT recallsT; // another table 
} 

, 나는

Optional<RecallsT> recallsT = recallsDAO.findById(recallId); 

을하도록 강요하고있어

RecallsT recallsT = recallsDAO.findById(recallId); 

할 수 있지만, 이것은 또 다른 문제 소개 : 지금은 내 최대 절전 모드를 사용할 수 없습니다를 객체가 더 이상 작동하지 않으므로 더 이상 사용할 수 없습니다.

eventsT.setRecallsT(recallsT); 

이제 "Optional < ...>"객체를 일반 객체에 넣을 수 없다는 오류가 발생합니다. Hibernate 엔티티에서 보여 주었 듯이, setter는 우리의 도메인 객체가 생성 된 전통적인 방식 때문에 직선적 인 일반 객체를 사용합니다.

어떻게해야합니까?

답변

8

대신

recallsT.ifPresent(eventsT::setRecallsT); 

옵션은 데이터의 가능한 부재를 나타내며,이 래퍼와 함께 작동하는 방법을 가지고 쓸 수 있습니다. 올바른 사용법에 대한 추가 정보 is here.

+0

::? 이 C++인가요? Java에서 유효합니까? –

+2

메소드 참조를위한 java 8 구문 - https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html – ledniov

+0

그리고 내 자신의 @Query findByXX() 메소드를 작성하는 경우에는 선택적 ? 왜냐하면 일반 객체를 반환하기 위해 작성할 수있는 사용자 정의 객체가 있고 그 객체에는 아무런 문제가 없기 때문에 실제로는 더 명확합니다. 일반 객체를 반환하는 모든 것에 대해 수동 스텁을 만들어야하는지 궁금합니다. –