hibernate实现多表联合查询。  以前用sql实现联合查询是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。  
   hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系。
   例如:student表和score表需要做联合查询。
   1)sql: select s.id,s.name,sc.score from student as s,score as sc where s.id = sc.userId;
   (字段都是用的数据库中字段名称)
   2)HQL: select s.id,s.name,sc.score from Student as s,Score as sc where s.id = sc.userId;
   (上面字段都是 javabean的属性)
    如果我们按1)查询的话,必须调用 session.createSQLQuery();方法
    如果按2)查询,还是调用 session.createQuery();
    只是要注意,平时我们查询的时候,例如:“from Student ”查询的结果集封装的全都是student对象,但是2)执行的结果集里面不是对象,而是一系列数组。需要转换成需要的样式。
下面 是查询的一段代码:
Session session = getHibernateTemplate().getSessionFactory()   .getCurrentSession();   StringBuffer sb = new StringBuffer(” select user.username,user.truename,user.sex,user.idnum,user.level,s.sumScore from Score as s,Examuser as user where s.id.userId = user.id “);   if(score != null){    if(score.getExamId()!=null && !”".equals(score.getExamId())      && !”null”.equals(score.getExamId())){     sb.append(” and s.examId =:examId “);    }    if(score.getExamPlace()!=null && !”".equals(score.getExamPlace())      && !”null”.equals(score.getExamPlace())){     sb.append(” and s.examPlace =:examPlace “);    }    if(score.getUsername()!=null && !”".equals(score.getUsername())      && !”null”.equals(score.getUsername())){     sb.append(” and s.username like:username “);    }   }   sb.append(” order by s.sumScore desc “);   Query q = session.createQuery(sb.toString());   if(score != null){    if(score.getExamId()!=null && !”".equals(score.getExamId())      && !”null”.equals(score.getExamId())){     q.setParameter(“examId”,score.getExamId());    }    if(score.getExamPlace()!=null && !”".equals(score.getExamPlace())      && !”null”.equals(score.getExamPlace())){     q.setParameter(“examPlace”,score.getExamPlace());    }    if(score.getUsername()!=null && !”".equals(score.getUsername())      && !”null”.equals(score.getUsername())){     q.setParameter(“username”,”%”+score.getUsername()+”%”);    }   }   List list = q.list();
需要将查询的结果集 进行一下转换:
List stuList = scoreService.findAllScore(queryScore, null); // 返回的结果集   if(stuList != null && stuList.size()>0){    list = new LinkedList();    StudentScore st;    for(int i = 0; i < stuList.size();i++){     st = new StudentScore();     Object[] object = (Object[])stuList.get(i);// 每行记录不在是一个对象 而是一个数组      String userId =  (String)object[0];     String username =  (String)object[1];     String truename =  (String)object[2];     String sex =  (String)object[3];     String idnum =  (String)object[4];     String level =  (String)object[5];     Double sumScore =  Double.parseDouble(String.valueOf(object[6]));     String paperId =  (String)object[7];     // 重新封装在一个javabean里面     st.setUserId(userId);     st.setUsername(username);     st.setTruename(truename);     st.setIdnum(idnum);     st.setLevel(DictSwitch.getValue(“DICT_LEVEL”,level));     st.setSex(DictSwitch.getValue(“DICT_SEX”,sex));     st.setPaperId(paperId);     st.setSumScore(sumScore);     st.setExamplace(DictSwitch.getValue(“DICT_EXAMSTATION”,examplace));     list.add(st); // 最终封装在list中 传到前台。    }
http://blog.sina.com.cn/s/blog_67b9ad8d01010by1.html
http://www.blogjava.net/jiafang83/archive/2009/07/26/288438.html
http://www.baidu.com/#wd=annotation%20hibernate%20%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=27&rsv_sug4=1246&rsv_sug1=11&rsv_pq=d0b7402c00009894&rsv_t=205czoWQgAeiez6W2jTr4EA75xgWZYUWpquzeJI2jfvH2yKw%2BzQdxz0rsnXFFAI2pPrJ&rsv_sug2=0&inputT=19417
http://www.w3school.com.cn/jquery/jquery_selectors.asp