为什么SQLQuery setParameter不能使用LIKE?

时间:2012-07-17 06:40:16

标签: java hibernate

我在这里:

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

我收到以下错误:

  

java.lang.IndexOutOfBoundsException:请记住,序数参数是从1开始的!

但是当我尝试时:

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

它的工作。

我需要使用LIKE。

3 个答案:

答案 0 :(得分:8)

你可以这样做:

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

答案 1 :(得分:3)

用户标准为

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

答案 2 :(得分:-2)

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

Session session = getSession();

SQLQuery query = session.createSQLQuery(strQuery );
相关问题