1

Я создаю систему бронирования рейсов, используя Spring MVC и Spring Security. В этом приложении я собираюсь сохранить несколько резервирований для одного пользователя. Затем, если пользователь зашел в систему, я хочу показать свои данные о бронировании. В базе данных есть несколько записей для одного пользователя. Вот простая форма. (Я использую Spring 4.1.6 и Spring security 4.0.1)Найти несколько объектов по имени, используя Spring JPA

<table class="table table-bordered table-hover table-striped "> 
     <thead> 
      <tr> 
       <th>User name</th> 
       <th>Operations</th> 
      </tr> 
     </thead> 

     <tbody> 
      <c:forEach items="${us}" var="user"> 
       <tr> 
        <td> 
         ${user.name} 
        </td> 
        <td> 
         ${user.passengers} 
        </td> 
       </tr> 
      </c:forEach> 
     </tbody> 
    </table> 

Вот controller

@RequestMapping("/account/my-bookings") 
public String showBookings(Model model, Principal principal){ 
    String name = principal.getName(); 
    model.addAttribute("us",reservationService.findAll(name)); 
    return "my-bookings"; 
} 

Вот service class

public List<FlightReservation> findAll(String name) { 
    FlightReservation flightReservation = flightReservationRepository.findByName(name); 
    return findAll(flightReservation.getName()); 
} 

Вот repository

public interface FlightReservationRepository extends JpaRepository<FlightReservation, Integer> { 

    FlightReservation findByName(String name); 

} 

Когда я выполняю это, он дает несколько исключений. Если в базе данных имеется несколько записей, она дает result returns more than one elements. Если в базе данных есть только одна запись, в консоли есть бесконечный цикл.

Как новичок, я ценю вашу помощь, чтобы узнать, что я делаю неправильную вещь или что мне нужно сделать, чтобы получить детали бронирования в таблице?

ответ

2

Обратный тип вашего метода репозитория неверен. Используйте список или набор. Наличие сингулярного типа возврата работает аналогично вызову getSingleResult по запросу JPA, бросая исключение, когда найдено несколько элементов.

Кроме того, метод обслуживания вызывает себя периодически, когда репозиторий возвращает значение. Вероятно, это должно быть реализовано следующим образом:

public List<FlightReservation> findAll(String name) { 
    return flightReservationRepository.findByName(name); 
} 
+0

Огромное вам спасибо, ты спас меня. Это работает хорошо. – RYJ

Смежные вопросы