Функция поиска Spring возвращает полный список, когда ничего не ищется - PullRequest
1 голос
/ 16 марта 2020

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

Я установил список так, чтобы он возвращал null, если он пуст, в чем заключается ошибка в моих логах c?

при тестировании и использовании findbyname SQL Я думаю, что в моем SQL состоянии

есть недостаток, используемый метод контроллера

@RequestMapping("search")
public ModelAndView SearchBeers(@RequestParam("searchTerm") String searchTerm) {

    return new ModelAndView("/Searchbeers", "beerList", service.Search(searchTerm));

}

, вызываемый сервисный метод

 public List<Beers> Search(String searchTerm) {
    EntityManager em = DBUtil.getEMF().createEntityManager();
    List<Beers> list = null;

    try {
        list = em.createNamedQuery("Beers.findByLikeName", Beers.class)
                .setParameter("name", searchTerm)
                .getResultList();
        if (list == null || list.isEmpty()) {
            list = null;
        }

    } finally {
        em.close();
    }
    return list;
}

и SQL используется оператор

@NamedQuery(name = "Beers.findByLikeName", query = "SELECT b FROM Beers b WHERE b.name LIKE CONCAT('%',:name,'%')")

JSP для отображения списка составляет

   <c:forEach items="${beerList}" var="beer"> 
            <tr>
                <td>${beer.id}</td>
                <td>${beer.name}</td>
                <td>${beer.abv}</td>


                <td>
                    <form action="/Assignment3/beer/viewBeer">
                        <input type="hidden" name="id" value="${beer.id}"/>
                        <input type="submit" value="<spring:message code="label.viewDetails"/>"/>
                    </form>
                </td>

            </tr>
        </c:forEach>

1 Ответ

1 голос
/ 16 марта 2020

У вас есть много способов решить эту проблему, но проблема в том, что когда строка пуста, ваш запрос:

SELECT b from Beers b Where b.name LIKE '%%'

Итак, вам нужно сделать флаг другого, когда есть пустая строка, потому что. .. LIKE '%%' найти каждое имя.

PD: Не рекомендуется возвращать ноль, лучше пустой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...