В моем весеннем приложении я добавил функцию поиска, где пользователь может искать в базе данных имя, оно работает, за исключением случаев, когда я ищу имена или похожие имена, но когда я ничего не ввожу и ищу, ничего не должен возвращать, но возвращает полный список имен.
Я установил список так, чтобы он возвращал 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>