programing

스프링 부트엔티티 클래스에 옵션 전달 방법 <>

cafebook 2023. 3. 29. 21:53
반응형

스프링 부트엔티티 클래스에 옵션 전달 방법 <>

저는 현재 스프링을 사용하여 웹사이트를 만들고 있는데, 이 코드를 어떻게 해결해야 할지 전혀 모르는 기본적인 시나리오를 우연히 발견하게 되었습니다.엔티티 = 옵션;

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 메서드를 제공합니다.(JpaRepositoryJPA 또는MongoRepositoryMongoDB의 경우) :

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

반응형