请教一个hql语句,问题大致是这样的:
有一个teacher类,属性有:id,name,year(年份),point(作为分数)【char4的string】
现在要写一个hql语句,实现查询出比上年进步了10%或者20%的学生的列表。
比如:有数据如下:
1,张三,2008,63
2,张三,2009,80,
3,张三,2010,76
4,张三,2011,90
5,李四,2008,30
6,李四,2009,35
7,李四,2010,60
8,李四,2011,61比上年进步10%的数据有:
2,张三,2009,80,
4,张三,2011,90
6,李四,2009,35
请各位给思路,如果有好idea,请不吝赐教!谢谢。
【急问!】【100%结贴!】

解决方案 »

  1.   

    统计2009年比2008年进步10%到30%之间的学生SELECT b.id,b.name,b.year,b.point FROM (SELECT id,NAME,YEAR,POINT FROM stu WHERE YEAR='2008')a,(SELECT id,NAME,YEAR,POINT FROM stu WHERE YEAR='2009') b 
      WHERE a.name=b.name AND (b.point*1.0/a.point)>=1.0 AND (b.point*1.0/a.point)<=3.0
    像你这个业务最好使用存储过程,动态的传年份
      

  2.   

    嗯谢谢你的存储过程的建议、
    SQL的语句我可以构造出,可是HQL的不知道如何写,虽然把变量和属性对话,表名和类名对换,但是变换之后使用 getHibernateTemplate().find(queryString, value);出来的就不是一个model的对象了。而是一个object的。
    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to org.test.Student
    不知道是不是我的方法错误?
      

  3.   

    我已经自己解决了。
    其实是一个多表查询,返回多对象的问题。
    解决办法可以参考这个描述:
    Object []object = (Object[]) dataList.get(i);
    Model model= (Model ) object[0];
    也就是取第一个对象。
    不过还是感谢帮忙解答的朋友,分就送给你吧。