在命名查询中使用Enum作为参数

时间:2016-11-04 15:01:17

标签: java enums named-query

我有一个命名查询,用于选择其中包含搜索字符串的所有记录。

这是我的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

但什么都没发生。希望有人可以帮我解决这个问题!

更新

这是接受从Controller传递的字符串并将其设置为查询参数的方法:

    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 个答案:

没有答案