2012-05-25 68 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

你是存在在lowerBoundupperBound前缺少參數指示符(冒號)。

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不知道這些是參數,將它們混淆列名。

相關問題