首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

hibernate 返回集合的有关问题

2012-07-31 
hibernate 返回集合的问题按时间查询最近的5条记录: LampStateTestInfo 为实体类 ,对应数据库表 LampState

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)"; 
试试看

热点排行