2012-11-26 45 views
9

我想執行搜索以特定字母開頭的特定字符串。 因此,例如,如果起始字母是'A',它應該產生一個包含字母表'A'的所有字符串的結果。如何在HQL中編寫類似查詢

我該如何做到這一點?

我的查詢如下圖所示

Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like %?%"); 
qry.setString(0,searchField); 
+0

''''不適合你嗎? –

+0

不,我認爲我的查詢存在一些問題。 查詢QRY = session.createQuery( 「從RegistrationBean如RB,其中R b」。+ searchCriteria + 「像%%?」) qry.setString(0,searchField); – Ni3

+0

[你有什麼嘗試?](https://whathaveyoutried.com)請發佈你到目前爲止的問題。 – Keppil

回答

9

您可以使用標準使用像

session = sessionFactory.openSession(); 
Criteria query = session.createCriteria(Pojo.class); 
query.add(Restrictions.like("column", "a", MatchMode.START)); 

它會給你它通過字母大怒「A」開頭的字符串列表。

18

查詢改成這樣:

Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like ?"); 
qry.setString(0, "%"+searchField+"%"); 
1
Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like :sf"); 
qry.setString("sf",'%'+searchField+'%'); 

以上事情爲我工作:)

+0

這很容易被SQL注入。 –

3

這樣

createQuery("from RegistrationBean as rb where rb.:searchCriteria like '%:searchField%'"); 
+1

@ Ni3這個怎麼樣。 –

+1

您是否聽說過有關SQL注入的任何信息? http://en.wikipedia.org/wiki/SQL_injection必須使用參數綁定來避免它。 –

+0

這個鏈接與hibernate和hql沒有任何關係。 –

6

更改爲

Query qry = session.createQuery("From RegistrationBean as rb where rb "; 
if (searchField != null) 
{ 
    qry = qry + " where rb.searchCriteria like :searchField "; 
} 
if (searchField!= null) 
{ 
    query.setString("searchField","%"+searchField+"%"); 
}