스프링 부트엔티티 클래스에 옵션 전달 방법 <>
저는 현재 스프링을 사용하여 웹사이트를 만들고 있는데, 이 코드를 어떻게 해결해야 할지 전혀 모르는 기본적인 시나리오를 우연히 발견하게 되었습니다.엔티티 = 옵션;
RoomEntity roomEntity = roomRepository.findById(roomId);
Reservation Resource(API 요청 클래스):
public class ReservationResource {
@Autowired
RoomRepository roomRepository;
@RequestMapping(path = "/{roomId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<RoomEntity> getRoomById(
@PathVariable
Long roomId){
RoomEntity roomEntity = roomRepository.findById(roomId);
return new ResponseEntity<>(roomEntity, HttpStatus.OK);}
}}
Room Repository 클래스:
public interface RoomRepository extends CrudRepository<RoomEntity, Long> {
List<RoomEntity> findAllById(Long id);
}
룸엔티티
@Entity
@Table(name = "Room")
public class RoomEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private Integer roomNumber;
@NotNull
private String price;
public RoomEntity() {
super();
}
}
당신의 오류에 따라 당신은 받게 됩니다.Optional<RoomEntity>
저장소의 findAll 메서드에서 다음 메서드로 이동합니다.RoomEntity
.
대신RoomEntity roomEntity = roomRepository.findById(roomId);
이것을 하다
Optional<RoomEntity> optinalEntity = roomRepository.findById(roomId); RoomEntity roomEntity = optionalEntity.get();
그 답변들은 할 일이 좀 부족해요.전화하기 전에get()
, 에 체크할 필요가 있습니다.isPresent()
. 이렇게.
Optional<RoomEntity> optionalEntity = roomRepository.findById(roomId);
if (optionalEntity.isPresent()) {
RoomEntity roomEntity = optionalEntity.get();
...
}
옵션 관련 기사 https://dzone.com/articles/using-optional-correctly-is-not-optional 를 참조하십시오.
이거 먹어봐, 난 괜찮아
RoomEntity roomEntity = roomRepository.findById(roomId).orElse(null);
첫 번째 해결책
구현할 수 있습니다.JpaRepository
대신CrudRepository
이는 예상대로 RoomEntity를 반환하는 getOne 메서드를 제공합니다.(JpaRepository
JPA 또는MongoRepository
MongoDB의 경우) :
public interface RoomRepository extends JpaRepository<RoomEntity, Long> {
List<RoomEntity> findAllById(Long id);
}
그리고.
RoomEntity roomEntity = roomRepository.getOne(roomId);
주의:EntityNotFoundException
이 roomId에 대한 RoomEntity가 없는 경우 느려집니다.
두 번째 솔루션
CrudRepository의 findById 메서드는 옵션을 반환하므로 RoomEntity가 있는 경우 적절하게 처리해야 합니다.예를 들어 다음과 같습니다.
RoomEntity roomEntity = optionalEntity.roomRepository.findById(roomId).get();
이 경우.get()
을 던지다NoSuchElementException
이 RoomId에 대한 RoomEntity가 없는 경우.
이 문서는 옵션 설명에 도움이 될 수 있습니다.http://www.baeldung.com/java-optional
RoomEntity roomEntity = roomRepository.findById(id).get();
이것으로 오류가 해결됩니다!
이 캐스팅을 하는 가장 짧은 방법은
RoomEntity roomEntity = roomRepository.findById(roomId).get();
@kaush-athukorala가 말했듯이, 당신은 단지 추가만 하면 됩니다..get()
의 마지막에RoomEntity roomEntity = roomRepository.findById(roomId);
그건 효과가 있다.
당신은 가질 것이다.RoomEntity roomEntity = roomRepository.findById(roomId).get();
이 중 하나를 사용할 수 있습니다.
RoomEntity = roomRepository.findById(roomId).get();
또는
RoomEntity = roomRepository.findById(roomId).Orse(null);
다음 방법으로 시험해 볼 수 있습니다.
Boolean roomEntity = roomRepository.existsById(roomId);
Check if exists then return true else false
OR
RoomEntity roomEntity = roomRepository.getById(roomId);
if(roomEntity != null) {
}
OR
This method is deprecated in new version. if you are using older version then it will work fine.
Optional<RoomEntity> roomEntity = roomRepository.getOne(roomId);
if(roomEntity.isPresent()) {
}
언급URL : https://stackoverflow.com/questions/50185164/spring-boot-how-to-pass-optional-to-an-entity-class
'programing' 카테고리의 다른 글
Woocommerce 숍 페이지 커스텀템플릿 (0) | 2023.03.29 |
---|---|
데이터베이스가 다운된 경우에도 Spring 서버를 부팅하려면 어떻게 해야 합니까? (0) | 2023.03.29 |
리액션이 포함된 쿠키 가져오기 (0) | 2023.03.29 |
Wordpress 프로젝트 옆에 있는 Laravel 프로젝트(public_html 폴더에 있음) (0) | 2023.03.29 |
쉼표를 사용하여 NSString을 분할합니다. (0) | 2023.03.29 |