按时间查询最近的5条记录: LampStateTestInfo 为实体类 ,对应数据库表 LampStateTestInfo (oracle数据库)
[code=JavaString]
sql = "select * from (select * from LampStateTestInfo where lampID=lampID "+
order by stateTime desc) where rownum <=5";
SQLQuery query = session.createSQLQuery(sql);
query.setInteger("lampID",lampID);
query.addEntity("LampStateTestInfo", LampStateTestInfo.class);
List <LampStateTestInfo> list = query.list();
return list;
[/code]
打印结果,但是返回5条记录都是一样的 都是最后一条;
拿SQL语句在ORACLE单独测试返回的是最近的5条不同的记录,符合要求。
怎么会不一致,求解·
------解决方案--------------------
- Java code
sql = "select * from LampStateTestInfo where lampID=lampID "+order by stateTime desc";SQLQuery query = session.createSQLQuery(sql);query.setInteger("lampID",lampID);query.addEntity("LampStateTestInfo", LampStateTestInfo.class);query.setFirstResult(0);query.setMaxResults(5);List <LampStateTestInfo> list = query.list();
------解决方案--------------------
debug打印出hibernate转化HQL后的sql是什么,然后用这个sql去查一下什么结果
------解决方案--------------------
加了query.setFirstResult(0);
query.setMaxResults(5);
后,sql也改了,你改了吗?
sql = "select * from LampStateTestInfo where lampID=lampID "+
order by stateTime desc";
------解决方案--------------------
加了
query.setFirstResult(0);
query.setMaxResults(5);
sql 也改成了 select * from LampStateTestInfo where lampID=? order by stateTime desc
这就不应该再出错了。
楼主
sql 改成 select * from LampStateTestInfo where lampID=? order by stateTime desc
然后不加下面这两行
query.setFirstResult(0);
query.setMaxResults(5);
看是不是按时间排序,且都查询出了。
------解决方案--------------------
你在怎么检测的结果都是相同记录?
------解决方案--------------------
是不是有时间相同的纪录?其他字段不一样?
------解决方案--------------------
建议加断点调试...
------解决方案--------------------
直接把 lampID 参数写死,然后 数据库 和 Java两端都测试下同一句话,类似:
String sql = "select * from LampStateTestInfo where lampID=100 order by stateTime desc"
看看有何效果。
------解决方案--------------------
改成
sql = "select * from LampStateTestInfo where lampID=lampID and rownum <=5 "+
"order by stateTime desc)";
试试看