以下是我的sql语句:SELECT * FROM
(select * from album as b order by b.publishtime desc limit 10) as a
order by a.click desc limit 5;
语句功能是先在专辑表中找出10个最后发布的专辑,然后在这10个专辑中找出点击数最多的5个专辑。hql语句不支持子表查询,而且子表里面也不知道如何实现limit 10 这个功能(括号里面的)。
现在越来越感觉hql不好用了,似乎一点都不灵活,很考验人呀,据说是任何sql语句都可以转换为hql,但是自己对hql还不熟悉呀,一点没感觉到hql能跟sql的灵活性相比。
希望各位高手给我解答!
(select * from album as b order by b.publishtime desc limit 10) as a
order by a.click desc limit 5;
语句功能是先在专辑表中找出10个最后发布的专辑,然后在这10个专辑中找出点击数最多的5个专辑。hql语句不支持子表查询,而且子表里面也不知道如何实现limit 10 这个功能(括号里面的)。
现在越来越感觉hql不好用了,似乎一点都不灵活,很考验人呀,据说是任何sql语句都可以转换为hql,但是自己对hql还不熟悉呀,一点没感觉到hql能跟sql的灵活性相比。
希望各位高手给我解答!
解决方案 »
- java IO 操作真纠结!
- cvc-complex-type.3.2.2: Attribute 'transation-manager' is not allowed to appear
- 很奇怪,很郁闷,的一个费解的问题==乱码
- 怎样在jsp中自动生成一个号码
- org.hibernate.mappingException:unknown entity
- Servlet怎么运行
- 非常奇特的现象
- 这个文件编译不了。为什么啊?????????????????????????
- 这么一个情况怎么开始学JSP
- 急问一个关于oracle中文支持的问题
- 向高手请教,系统权限的设计问题
- 诚挚觅寻有WEB开发经验的程序员一起创业.
查询时用的比较多的是
org.hibernate.criterion.Restrictions
用于加查询限制很轻松的、
可以直接查询的,
select * from album as b order by b.publishtime desc,b.click desc limit 5;
两种方法:
第一种是直接用sql查询数据:
Query query = session.createSQLQuery("select * from album as b order by b.publishtime desc,b.click desc limit 5");
List<Object []> results = (List<Object []>)query.list();
这个results链表的每个元素是一个对象数组,数组的顺序就是你在select 后面
列出的顺序,最好不要用*号代替,用*号的话数据库会先查询表的列名,所以
性能要差一点。
第二种是用HQL查询:
Album 是个持久化的类
Query query = session.createQuery("from Album a order by a.publishtime desc,a.click desc");
query.setFirstResult(0);
query.setMaxResults(5);
List<Album> results = query.list();
List<Album> results = session.createCriteria(Album.class).addOrder(Order.desc("publishtime")).addOrder(Order.desc("click")).setFirstResult(0).setMaxResults(5).list();