Используйте 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";
}

0 ответов

Другие вопросы по тегам