zxinger 2008-12-08 11:48
浏览 275
已采纳

hibernat查询报错

我要通过orderId来查询orderList(订单明细表),返回一个List。

[color=red]我的impl类的查询方法[/color]
public List query(String orderId) throws Exception {
List all=new ArrayList();
String hql="FROM OrderList AS o WHERE o.orderId=?";
Query q=this.session.createQuery(hql);
q.setString(3,orderId);
all=q.list();
this.session.close();
//all=this.session.createQuery(hql).setString(3, orderId).list();
return all;
}
[color=red]我的hibernat表与pojo类的映射文件[/color]

























[color=red]测试类方法[/color]
public static void main(String[] args) {
OrderList ol=new OrderList();
String orderId="ddddd";
List all=new ArrayList();

    try {
        all=daoFactory.getOrderListImpl().query(orderId);
    } catch (Exception e) {
        e.printStackTrace();
    }
    if(all.iterator().hasNext()){
        ol=all.iterator().next();
        System.out.println(ol.getOrderId());
    }
    else{
        System.out.println("do data");
    }

    if(all.iterator().hasNext()){
        ol=all.iterator().next();
        System.out.println(ol.getOrderId());
    }
    else{
        System.out.println("no data");
    }

        }

[color=red] run as java Application报错信息:[/color]
java.lang.IllegalArgumentException: Positional parameter does not exist: 3 in query: FROM OrderList AS o WHERE o.orderId=?no data
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:328)
at org.hibernate.impl.AbstractQueryImpl.setString(AbstractQueryImpl.java:434)
at com.netBook.impl.orderListImpl.query(orderListImpl.java:39)
at com.test.main(test.java:32)

[color=red]如果将impl查询方法的 q.setString(3,orderId);
改为q.setString("orderId",orderId)的话[/color] 一样报类似错[color=red][/color]
java.lang.IllegalArgumentException: Parameter orderId does not exist as a named parameter in [FROM OrderList AS o WHERE o.orderId=?]no data

at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:349)
at org.hibernate.impl.AbstractQueryImpl.setString(AbstractQueryImpl.java:609)
at com.netBook.impl.orderListImpl.query(orderListImpl.java:39)
at com.test.main(test.java:32)

为什么会说orderId不存在,怎么检查也没有发现错误啊?请大家指教。
[b]问题补充:[/b]
nickevin 你的方法很好,我初学框架,要的不是改进。请问我写的东西错在哪里?为什么会报这种错误?

  • 写回答

4条回答

  • iteye_19016 2008-12-08 12:49
    关注

    [code="java"]
    //是这句错了 改为 q.setString(1,orderId);
    q.setString(3,orderId);
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料