#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() после фиксации ответа