2012-05-25 3 views
3
public List<Data> List(String name, String id, int lowerBound, int upperBound) throws WiMatchException { 
    try { 
     Session session = getHibernateTemplate().getSessionFactory().openSession(); 
     SQLQuery query = session.createSQLQuery("select * from data inner join route on (data.id=route.data_id and data.status=:status and data.is_active='Y' and route.owner_id= :ownerId) LIMIT lowerBound,upperBound "); 
     query.addEntity(UserData.class); 
     query.setString("status", status); 
     query.setString("ownerId", ownerId); 
     query.setInteger("lowerBound", lowerBound); 
     query.setInteger("upperBound", upperBound); 
     List<UserData> resList = query.list(); 

     logger.debug("size of List() =" + resList.size()); 
     session.close(); 
     return resList; 

    } catch (Exception e) { 
       ... 
    } 
} 

При выполнении описанного выше метода я получаю следующее исключениеjava.lang.IllegalArgumentException: Параметр не существует в качестве имени параметра в

java.lang.IllegalArgumentException: Parameter lowerBound does not exist as a named parameter in [select * from data inner join route on (data.id=route.data_id and data.status=:status and data.is_active='Y' and route.owner_id= :ownerId) LIMIT lowerBound,upperBound ] 

нужны предложения, чтобы решить эту

ответ

7

Вы находитесь отсутствующие указатели параметров (двоеточия) перед lowerBound и upperBound.

SQLQuery query = session.createSQLQuery(
    "select * from data "+ 
    "inner join route on (data.id=route.data_id and data.status=:status and data.is_active='Y' and route.owner_id= :ownerId)"+ 
    "LIMIT :lowerBound,:upperBound " 
); 

Без этих указателей JDBC не знает, что это параметры, путающие их для имен столбцов.

Смежные вопросы