我有一个命名查询,用于选择其中包含搜索字符串的所有记录。
这是我的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";
}