四个表:
user(用户表):userId(主键),userName(用户名称)
cons(收货人信息表):Id(主键),consName(收货人名称),userId(用户Id,外键)
order(订单表):orderId(主键),orderNum(订单编号),userId(用户Id,外键)
orderAmount(订单金额信息表):Id(主键),orderId(订单Id,外键),total(订单金额)现在要根据这四个表里的字段查询订单信息,而且查询条件是四个表里的都有,就是可以根据下单人(也就是用户名)、收货人、订单编号、订单金额来查询。请问哪位高手会用Criteria或者其他方法来实现这种查询?

解决方案 »

  1.   

    对于查询:一般有三种方法:第一种方法:Criteria,对于单表,多个条件具有很大的优势。
    第二种方法:HQL查询
    第三种方法:原生sql查询,用于hql查询无法解决的问题。
    很显然:这个问题用hql查询和原生sql查询都比较好,用Criteria查询不太合适。
      

  2.   

       不太适合但是应该也是有办法的,就想知道怎么用criteria查
      

  3.   

    刚开发过一个项目,跟这个问题差不多:参考一下。
    sql=select {u.*},{c.*},{o.*},{or.*} from user u,cons c,order o ,orderAmount or where u.userid=c.userid
    and o.orderid=or.orderid  and u.userid=o.userid and u.userName=? and c.consName=?
    and o.orderNum=? and or.total
    Query query=session.createSQLQuery(_sql).addEntity("u",User.class).addEntity("c",Cons.class).addEntity("o",Order.class).addEntity("or",OrderAmount .class);
    List list=query.list();
    注意:list中存放的每一个对象是一个长度是4数组,分别表示对象:u,c,o,or
    假如要从list中取出所有的c对象放入list中应该这样写: List<Cons> list1=new ArrayList<Cons>();
    Iterator it=list.iterator();
    while(it.hasNext()){
    Object[] result=(Object[])it.next();
    Client c=(Client)result[1];
    list1.add(c);
    }
      

  4.   

    楼上说的是Criteria实现四表查询列,你这是hql查询多表连接里面是返回的object数组  按顺序装载的类。Criteria四表查询
      

  5.   

    楼上这种是原生的sql语句实现的,有没有用Criteria实现的?
    因为我现在这个实现类已经extends HibernateDaoSupport这个类,好像再不能用原生sql语句了。所以我想问还有没有别的方法?