多表查询为什么要用QBE,QBC?
我从来都是用HQL检索方式,举个例子:
这样 public List listUser() throws DataAccessException, HibernateException {

return (List) getHibernateTemplate().find("select u.username, r.roomname from User u,Room r where u.userid=r.userid");
}

解决方案 »

  1.   

    主要是要使用多值查询。通过对象传送。这样我写一个dao层就可以通用。
      

  2.   

    加载从表后报错原因找出来了,不能做order排序。取消排序后就ok啦。但是为什么不能排序呢?这也是一个问题。且不管这个问题。
    现在的问题是,用这段代码只能返回最后一个对象的集合,而不是两个对象的联查集合。
    比如obj[]有两个对象,obj[0]  obj[1]。只能返回obj[1]的结果。这是为什么呢?
      

  3.   


    从新发一遍代码,上面的看其来有点乱/**
     * 使用对象数组的查询方法
     * 
     * @param c:查询的类
     * @param obj:查询的对象
     * @param orber:按那个字段排序
     * @param row:每页多少条记录
     * @param page:第几页
     * @return List: 集合
     */
    public List find(Class c, Object[] obj, String[] order, int row, int page) {
    // 用spring的类创建session
    Session session = this.getSession();
    List list = null;
    int cou=1;
    try {
    Criteria criteria=null;
    if (obj != null) {
    for (int i = 0; i < obj.length; i++) {
    if (obj[i]!=null) {
    Class c1=obj[i].getClass();
    criteria=session.createCriteria(c1);
    Example example = Example.create(obj[i]);
    //example.enableLike(MatchMode.ANYWHERE);// 匹配模式,使用模糊查询必填项。
    // example.excludeNone();//空的不做查询条件
    example.excludeZeroes();// 0不要查询
    example.ignoreCase();
    criteria.add(example);
    cou++;
    }
    }
    }
    if(cou==1)
    criteria=session.createCriteria(c);
    if (row != 0 && page != 0) {
    criteria.setMaxResults(row);// 最大显示记录数
    criteria.setFirstResult((page - 1) * row);// 从第几条开始
    } // 判断是否有排序请求,如果有加入到排序方法中
    if (order != null) {
    for (int i = 0; i < order.length; i++)
    criteria.addOrder(Order.desc(order[i]));
    }
    list = criteria.list();
    } catch (HibernateException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } finally {
    session.close();
    }
    return list;
    }