Manager代码:service.getPageModelForSql("select em.name ,pc.date,dept.name as dname,p.name as pname ,pc.postNum " +
"from t_postcount pc ,t_post p ,t_employees em ,t_department dept " +
"where pc.post = p.id and pc.epid = em.id and p.pid = dept.id " +
"and em.id = "+employeesId+" order by dept.id,pc.date desc ", offset, pageSize);执行代码:Query query = this.getSession().createSQLQuery(sql); //sql就是以上sql语句查询结果代码:List list = query.list();
for (int i=0;i<query.list().size();i++){
Object[] o = (Object[]) query.list().get(i); 
System.out.println((String)o[0]+"==="+(Date)o[1]+"==="+(String)o[2]+"==="+(String)o[3]+"==="+Integer.parseInt(o[4].toString()));
}
输出结果:
张三===2012-01-15 00:00:00.0===张三===张三===3
张三===2011-11-11 00:00:00.0===张三===张三===8
张三===2011-11-12 00:00:00.0===张三===张三===5mysql执行结果:
张三 2012-01-15 00:00:00 神外一区 大夜班 3
张三 2011-11-12 00:00:00 神外一区 大夜班 5
张三 2011-11-11 00:00:00 神外一区 大夜班 8因为要取三个表中都是NAME的字段,所以hibernate执行的结果好像都视同为一个字段。请教各位。

解决方案 »

  1.   

    我通过别的方法做出来了。花了我3个小时Query query = this.getSession().createSQLQuery("select {em.*},{pc.*},{dept.*},{p.*} " +
    "from t_postcount pc ,t_post p ,t_employees em ,t_department dept " +
    "where pc.post = p.id and pc.epid = em.id and p.pid = dept.id " +
    "and em.id = "+employeesId+" order by dept.id,pc.date desc ")
    .addEntity("em",Employees.class)
    .addEntity("pc",PostCount.class)
    .addEntity("dept",Department.class)
    .addEntity("p",Post.class);
    List<Object[]> l = query.list();
    List list = new ArrayList();
    for(int i=0;i<l.size();i++){
    PostCountBean pcb = new PostCountBean();
    pcb.setName(((Employees)l.get(i)[0]).getName());
    pcb.setDate(( (PostCount)l.get(i)[1]).getDate());
    pcb.setDname(( (Department)l.get(i)[2]).getName());
    pcb.setPname(( (Post)l.get(i)[3]).getName());
    pcb.setPostNum(( (PostCount)l.get(i)[1]).getPostNum());
    System.out.print (((Employees)l.get(i)[0]).getName());
    System.out.print (( (PostCount)l.get(i)[1]).getDate());
    System.out.print (( (Department)l.get(i)[2]).getName());
    System.out.println(( (Post)l.get(i)[3]).getName());
    list.add(pcb);
    }
    以上方法就可以查询并取出值了。或许有点儿笨,可以目前找不到其他更好的方法了。想要只查询所要查询的各个表中的字段,还没方法。希望能给其他人带来帮助。