hql语句查询是否能用到数据库中的索引

hql语句查询是否能用到数据库中的索引,第1张

hql最终转成SQL到数据库执行的,肯定可以使用到数据库中的索引,只要注意SQL的写法,你的写法应该使用到建的索引了;控制台通过设置能看到HQL生成的SQL;HQL应该没完善到支持直接指定索引如 oralce /*+index(XXX)*/ 的形式;

hql就是hibernate里的sql语句,CommodityFee是一个实体类,是数据库表的一个映射类,from CommodityFee就相当于sql中的from+该类对应的表名,select 后边的new CommodityFee()表示把查询结果构造成一个类,返回的结果集就是类了。

java:

String hql = "select myrank from "

+ "( select s.*,dense_rank() over (order by s.studentScore desc) as myrank from StudentPo s) myranktable "

+ "where myranktable.studentId = "+currentUser.getStudentId()+""

数据库里面:

select myrank from 

(select s.* , rank() over (order by s.student_score desc) as myrank from student_tb s)  myranktable 

where myranktable.student_id= 13

一样一样的句子,在框架里面就不跑,简直神特么奇怪。

关于语句的拆分:

select s.* , rank() over (order by s.student_score desc) as myrank from student_tb s

这是根据学生成绩得到一个排序过后的表儿,最后一列 列名是 myrank。根据学生成绩排的名词。【可以把 rank() 换成dense_rank()看看效果。】

招数2:【因为总是报未识别的 token(标志),比如 走一遍 java,可能 数据库 就不认识 rank() 和 dense_rank()了。】

所以 我的 java里面这样写的:

String sql =  "select myrank from "

+ " ( select s.student_id,rank() over ( order by s.student_score desc ) as myrank from student_tb s ) "

+ " where student_id = "+currentUser.getStudentId()+""

Query query = this.getSession().createSQLQuery(sql)

List list =query.list()

this.getSession().beginTransaction().commit()

System.out.println(list)

//this.getHibernateTemplate().

Object ob = list.get(0)

String string = ob.toString()

int number = Integer.parseInt(string)

System.out.println("排名:"+number)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6772962.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存