我正在嘗試使用 spring 和 MySQL 查詢制作簡單的搜索欄。我使用以下代碼獲取客戶串列,但出現錯誤 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:%。
我使用的代碼:
`public List<CustDTO> getCust(String name) throws Exception {
List<CustDTO> customerList=null;
String queryString ="SELECT c FROM Cust c WHERE c.name LIKE %?1%";
Query query=entityManager.createQuery(queryString);
query.setParameter(1, name);
List<Cust> result = query.getResultList();
customerList=new ArrayList<CustDTO>();
for (Cust customerEntity : result) {
CustDTO customer=new CustDTO();
customer.setName(customerEntity.getName());
customer.setCity(customerEntity.getCity());
customerList.add(customer);
}
System.out.println(customerList);
return customerList;
}
}`
uj5u.com熱心網友回復:
是的,Hibernate 不會讓你這樣做。如果您希望您的 like 查詢起作用,請使用:
String queryString ="SELECT c FROM Cust c WHERE c.name LIKE ?1";
Query query=entityManager.createQuery(queryString);
query.setParameter(1, "%" name "%”);
或者您甚至可以使用本機查詢。
uj5u.com熱心網友回復:
public List<CustDTO> getCust(String theSearchName) throws Exception {
Query theQuery = null;
theQuery = createQuery("from CustDTO where lower(name) like :theName", CustDTO.class);
query.setParameter("theName", "%" theSearchName.toLowerCase() "%");
List<CustDTO> customers = theQuery.getResultList();
return customers;
lower( name ) - name 是來自 CustDTO 物體的欄位。
您還可以添加檢查您的輸入是否為空
if (theSearchName != null && theSearchName.trim().length() > 0) {
// do search with like
}else {
// theSearchName is empty ... so just get all customers
theQuery =currentSession.createQuery("from CustDTO", CustDTO.class);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479448.html
