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 你的方法很好,我初学框架,要的不是改进。请问我写的东西错在哪里?为什么会报这种错误?

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

class 主表
{
String id;
String name;

   List<子表>  list = new ArrayList<子表>();

}

class 子表
{
String id;
String name;
}



<!-- 基本属性 我就省略了 -->





</class>

查询语句:
getHibernateTemplate().loadAll(你的主表实体类名称);

如果你用Spring的话 很方便 不需要连接SQL语句
如果不用spring 按照你上面的也可以 主要是关系要对头

能给我看看 主表和子表的hbm文件吗 主要是主表
哦 对了 你的关联关系是什么

1:1 单向 or 1:1双向??

你只有一个?,
setString(3,orderId);里面的3是哪来的