日期:2014-05-19  浏览次数:20658 次

hibernate 返回集合的问题
按时间查询最近的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)"; 
试试看