有如下表格,显示了多个人的多科目成绩,要输出每个人最高分的科目
ID    Name     Subject     Score
1     张三      语文          90
2      李四      体育          80
3      老五      政治          70
4      李四      英语          87
5      张三      数学          63
6      老五      化学          96
如果用SQL查询的可写为,select B.ID, A.name,B.subject,A.score from
 (select name,max(score) as score from tbA group by tbA.name) a,tbA as b 
 where b.name=a.name and b.score=a.score结果:
1   张三      语文   90
4   李四      英语   87
6   老五      数学   96
那么如何用hql来表达呢,google一下好像hql不支持from的嵌套查询sqlhql嵌套查询

解决方案 »

  1.   

    这样不是很好么,为何偏要转hql呢?
    即使你转好了hql,hibernate在运行的时候还得再转成sql呢!
      

  2.   

    如果想用hibernate执行,并将查询结果对象化,可采用
    this.getSession().createSQLQuery("select {toh.*} from table toh where toh.customer_no = 'xxx' ", "toh", TableVo.class).list(); 这样可以将结果转换成自定义的对象。
      

  3.   

    谢谢1楼,现在在学习hql,由于项目中都采用了hql,所以想保证代码一致性,也想向大家请教下在实际项目中hql是如何处理这种相对复杂的查询的,然道还是用的sql?
      

  4.   

    谢谢,但是我的主要疑问是使用hql如何进行类似查询,不知道兄台有没有处理过类似情况。
      

  5.   

    不想引入原生查询,那就把带子查询的sql转为简单查询的sql吧。
      

  6.   

    那就用代码写呗。分两段 B一段A一段 放到LIST里在取不去一样了 单表HQL应该会 吧 如果全用HQL也可以 但是AB都是一个表 麻烦还没必要。
      

  7.   

    我没怎么用过HQL,不太了解。如果不支持嵌套from,你把嵌套from改成join语句不行吗?
      

  8.   

    Hibernate 可以说有两套执行sql 语句的方法 一个就是刚刚写的 CreateSQLQuery()
      还是一个就是执行原生态的SQL  CreateQuery(“from table”)  好像是这个方法
      

  9.   


    建议用代码写,一次不行分两次进行,能不用sql就不要用,太不安全了