Используйте Enum в качестве параметра в именованном запросе
У меня есть именованный запрос, который выбирает все записи, в которых есть строка поиска.
Это мое NamedQuery
,
@NamedQuery(
name = "findAllPersonBySearch",
query = "SELECT p FROM Person p "
+ "WHERE LOWER(p.pvId) LIKE LOWER(:searchString) "
+ "OR LOWER(p.firstName) LIKE LOWER(:searchString) "
+ "OR LOWER(p.middleName) LIKE LOWER(:searchString) "
+ "OR LOWER(p.lastName) LIKE LOWER(:searchString) "
+ "OR p.birthDate LIKE :searchString"
)
Запись содержит 2 перечисления. Один - это пол, а другой - тип личности. Вот мои перечисления:
PersonType
package ph.com.smesoft.hms.reference;
public enum PersonType {
Customer, Personnel
}
Пол
package ph.com.smesoft.hms.reference;
public enum Gender {
Male, Female
}
У меня есть окно поиска в моем списке, которое возвращает строку всякий раз, когда нажимается кнопка поиска.
Как использовать перечисления в качестве параметров в моем именованном запросе?
Я попробовал это:
ph.com.smesoft.hms.reference.PersonType.Personnel = :searchString
Но ничего не случилось. Надеюсь, что кто-то может помочь мне в этом!
ОБНОВИТЬ:
Здесь метод, который принимает строку, переданную из контроллера, и устанавливает ее в качестве параметра запроса:
public List<Person> findAllBySearch(String searchString){
TypedQuery<Person> searchResult = em.createNamedQuery("findAllPersonBySearch", Person.class);
searchResult.setParameter("searchString",'%'+searchString+'%');
List<Person> result=searchResult.getResultList();
return result;
}
и это мой метод контроллера, который принимает строку, набранную из представления:
Метод Контроллера
@RequestMapping(value = "/search", method = { RequestMethod.GET })
public String listofFloor(@ModelAttribute("SearchCriteria") SearchForm searchForm, Model uiModel) {
uiModel.addAttribute("people", personService.findAllBySearch(searchForm.getSearchString()));
return "people/list";
}