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: 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 ]

これを解決するには提案が必要です

4

1 に答える 1

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 はこれらがパラメーターであることを認識せず、列名と混同します。

于 2012-05-25T03:49:36.220 に答える