我要通过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是哪来的