Не удалось найти по внешнему ключу

#spring-boot

Вопрос:

Я хочу отобразить все комнаты, принадлежащие больнице текущего пользователя

Классная комната :

 @Entity(name = "rooms")
@Table( name = "rooms",
        uniqueConstraints = {
                @UniqueConstraint(columnNames = "roomNumber")
        })
public class Room {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long idRoom;

    private  String roomNumber;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(nullable = false, name = "idhospital")
    private Hospital hospital;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "room")
    private Set<Bed> beds;
 
  //getter and setter
 

Хранилище :

  @Query("SELECT rm from rooms rm where rm.hospital=?1" )
      List<Room> findRoomsByHospital(Hospital hospital);
 

Обслуживание :

 List<Room> getRoomsByHospital(Hospital hospital);
 

Сервисимпл :

   @Override
    public List<Room> getRoomsByHospital(Hospital hospital) {

        return roomRepository.findRoomsByHospital(hospital);

    }
 

Контроллер :

      @GetMapping("/display/room")
public ResponseEntity<List<Room>>  getRoomsbyHospitalId(Authentication authentication) {
    logger.info("Getting all RoomsByHospitalId  from room table...Call getRoomsbyHospitalId ");


     // to get the current user
      Optional<User> user = userRepository.findByUsername(authentication.getName());

      // to get the id of the hospital of the current user
      Hospital hospital = user.get().getHospital();


    logger.info("Data extracted from room table...");
    //return ResponseEntity.ok(HospitalRooms);
    return new ResponseEntity<>(roomService.getRoomsByHospital(hospital), HttpStatus.OK) ;
}
     
 

У меня была эта ошибка :

введите описание изображения здесь

введите описание изображения здесь

=========================================================================

помогите, пожалуйста!

Комментарии:

1. Вы убедились, что ваш объект аутентификации не является нулевым? В противном случае функция authentication.getName() выдаст NPE при попытке получить свойство из NULL. Далее: правильно ли введен репозиторий или значение at может быть равно нулю? Установите точку останова и проверьте, не являются ли проверка подлинности и репозиторий нулевыми. Примечание: проверьте необязательного пользователя, если он не пуст, перед вызовом get на необязательном.

2. Не null Я тестирую с помощью своего интерфейса, у меня есть пользователь для входа

3. А как насчет хранилища? Основываясь на вашем снимке экрана, строка содержит только репозиторий и объект аутентификации, которые могут быть пустыми и создавать NPE

4. объект аутентификации Не равен нулю, и в репозитории я изменил запрос следующим образом:

5. @Query(значение=»выберите * из комнат, где rooms.idhospital=?1″, NativeQuery=true)

Ответ №1:

У меня была та же проблема. Решение для добавления этой записи @JsonIgnore здесь

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(nullable = false, name = "idhospital")
    private Hospital hospital;
 

Ответ №2:

Просто исключение NullPointerException на самом деле не показывает, откуда оно исходит, чтобы помочь вам исправить ошибку в приложении.свойства напишите следующее:

 spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
 

При запуске сейчас он покажет вам, как hibernate обрабатывает ваши запросы, где находятся нулевые объекты, или если он получал ошибку до этого. Здесь вы получаете только удостоверение личности, и это, например, модель больницы

    // to get the id of the hospital of the current user
          Hospital hospital = user.get().getHospital();
 

Попробуйте просто сделать это вместо этого:

  Long hospital = user.get().getHospital();
 

Комментарии:

1. java.lang. Исключение IllegalStateException: Не удается вызвать функцию sendError() после фиксации ответа