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