2012-07-17 54 views
3

我這裏有:爲什麼SQLQuery setParameter不能使用LIKE?

Session session = getSession(); 
SQLQuery query = session.createSQLQuery("SELECT * FROM PERSON WHERE NAME LIKE '%?%'"); 
query.setParameter(0, personName); 

我得到以下錯誤:

java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!

但是當我嘗試:

Session session = getSession(); 
SQLQuery query = session.createSQLQuery("SELECT * FROM PERSON WHERE NAME = ?"); 
query.setParameter(0, personName); 

其工作。

我需要使用LIKE。

回答

8

你可以這樣做:

Session session = getSession(); 
SQLQuery query = session.createSQLQuery("SELECT * FROM PERSON WHERE NAME LIKE ?"); 
query.setParameter(0, "%" + personName + "%"); 
+0

你的意思是我必須使用相同,只是把 「%」 上的setParameter? – NinjaBoy 2012-07-17 06:42:58

+0

對不起,錯字。你使用'LIKE',但把'%'放在'setParameter()'調用中。 – Keppil 2012-07-17 06:44:06

+0

謝謝老兄...你救了我一天! – NinjaBoy 2012-07-17 07:02:27

3

用戶標準作爲

Criteria criteria = getSession().createCriteria(Person.class); 
criteria.add(Restrictions.like("name", personName, MatchMode.ANYWHERE)); 
criteria.list(); 
+0

當您使用休眠模式時,使用條件將會提供比原生SQL查詢更好的性能 – 2012-07-17 06:45:49

+0

您的方法對我來說有點新鮮。 – NinjaBoy 2012-07-17 07:03:04

-2
String strQuery = "SELECT * FROM PERSON WHERE upper(NAME) LIKE '%" 
       + personName.trim().toUpperCase() + "%'"; 

Session session = getSession(); 

SQLQuery query = session.createSQLQuery(strQuery);