日期:2014-05-20  浏览次数:20763 次

如何用Criteria实现四表查询?
四个表:
user(用户表):userId(主键),userName(用户名称)
cons(收货人信息表):Id(主键),consName(收货人名称),userId(用户Id,外键)
order(订单表):orderId(主键),orderNum(订单编号),userId(用户Id,外键)
orderAmount(订单金额信息表):Id(主键),orderId(订单Id,外键),total(订单金额)

现在要根据这四个表里的字段查询订单信息,而且查询条件是四个表里的都有,就是可以根据下单人(也就是用户名)、收货人、订单编号、订单金额来查询。

请问哪位高手会用Criteria或者其他方法来实现这种查询?


------解决方案--------------------
对于查询:一般有三种方法:第一种方法:Criteria,对于单表,多个条件具有很大的优势。
第二种方法:HQL查询
第三种方法:原生sql查询,用于hql查询无法解决的问题。
很显然:这个问题用hql查询和原生sql查询都比较好,用Criteria查询不太合适。
------解决方案--------------------
刚开发过一个项目,跟这个问题差不多:参考一下。
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);
}